home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d1 / inter489.arc / INTERRUP.B < prev    next >
Text File  |  1989-07-23  |  189KB  |  5,293 lines

  1. INT 28 - DOS 2+ internal - KEYBOARD BUSY LOOP
  2.    This interrupt is called from inside the "get input from keyboard" routine
  3.    in DOS, if and only if it is safe to use INT 21 to access the disk at that
  4.    time.  It is used primarily by the PRINT.COM routines and TSR programs, but
  5.    any number of other routines could be chained to it by saving the original
  6.    vector, and calling it with a FAR call (or just JMPing to it) at the end of
  7.    the new routine.
  8.  
  9.    The INT 28h handler may invoke any INT 21h function except functions 00h
  10.    through 0Ch (and 50h/51h under DOS 2.xx unless DOS CritErr flag is set).
  11.  
  12.    Until some program installs its own routine, this interrupt vector simply
  13.    points to an IRET opcode.
  14. ---------------------------------------------
  15. INT 29 - DOS 2+ internal - FAST PUTCHAR
  16.    This interrupt is called from the DOS output routines if output is going to
  17.    a device rather than a file, and the device driver's attribute word has
  18.    bit 3 (04h) set to "1".
  19. ---------------------------------------------
  20. INT 2A - Microsoft Networks - NETWORK INSTALLATION CHECK
  21.     AH = 00h
  22. Return: AH <> 00h if installed
  23. ---------------------------------------------
  24. INT 2A - Microsoft Networks - EXECUTE NETBIOS REQUEST
  25.     AH = 01h
  26.     ???
  27. Return: ???
  28. ---------------------------------------------
  29. INT 2A - Microsoft Networks - SET NET PRINTER MODE
  30.     AH = 02h
  31.     ???
  32. Return: ???
  33. ---------------------------------------------
  34. INT 2A - Microsoft Networks - CHECK DIRECT I/O
  35.     AX = 0300h
  36.     DS:SI -> ASCIZ disk device name
  37. Return: CF clear if allowed
  38. ---------------------------------------------
  39. INT 2A - Microsoft Networks - EXECUTE NETBIOS
  40.     AH = 04h
  41.     AL = 00h for error retry, 01h for no retry
  42.     ES:BX -> NCB
  43. Return: AX = 0000h for no error
  44.     AH = 01h, AL = error code
  45. ---------------------------------------------
  46. INT 2A - Microsoft Networks - GET NETWORK RESOURCE INFORMATION
  47.     AX = 0500h
  48. Return: AX = reserved
  49.     BX = number of network names
  50.     CX = number of commands
  51.     DX = number of sessions
  52. ---------------------------------------------
  53. INT 2A - NETBIOS - NETWORK PRINT-STREAM CONTROL
  54.     AH = 06h
  55.     AL = 01h set concatenation mode
  56.          02h set truncation mode (default)
  57.          03h truncate print stream now
  58. Return: CF set on error
  59.         AX = error code
  60. Note: subfunction 03h is equivalent to Ctrl/Alt/keypad-*
  61. ---------------------------------------------
  62. INT 2A - MS Networks or NETBIOS - ???
  63.     AX = 2001h
  64.     ???
  65. Return: ???
  66. Note: intercepted by DESQview 2.x
  67. ---------------------------------------------
  68. INT 2A - Microsoft Networks - BEGIN DOS CRITICAL SECTION
  69.     AH = 80h
  70.     AL = 01h to 06h  critical section number
  71. Note:    SHARE.EXE uses critical section number 01h
  72. ---------------------------------------------
  73. INT 2A - Microsoft Networks - END DOS CRITICAL SECTION
  74.     AH = 81h
  75.     AL = 01h to 06h  critical section number
  76. Note:    SHARE.EXE uses critical section number 01h
  77. ---------------------------------------------
  78. INT 2A - Microsoft Networks - SERVER HOOK
  79.     AH = 82h
  80.     STACK: AX from call to INT 21
  81. Return: stack unchanged
  82. Note: called by the INT 21h function dispatcher for function 0 and functions
  83.       greater than 0Ch except 59h
  84. ---------------------------------------------
  85. INT 2A - Microsoft Networks - KEYBOARD BUSY LOOP
  86.     AH = 84h
  87. Note: similar to DOS's INT 28h
  88. ---------------------------------------------
  89. INT 2B - Internal routine for MSDOS (IRET)
  90. ---------------------------------------------
  91. INT 2C - Internal routine for MSDOS (IRET)
  92. ---------------------------------------------
  93. INT 2D - Internal routine for MSDOS (IRET)
  94. ---------------------------------------------
  95. INT 2E - DOS 2+ internal - EXECUTE COMMAND
  96.     DS:SI -> counted CR-terminated command string
  97. Note:    the top-level command.com executes the command
  98.     all registers including SS and SP are destroyed as in INT 21/AH=4Bh
  99.     Since COMMAND.COM processes the string as if typed from the keyboard,
  100.     the transient portion needs to be present, and the calling program
  101.     must ensure that sufficient memory to load the transient portion can
  102.     be allocated by DOS if necessary.
  103. ---------------------------------------------
  104. INT 2F - Multiplex - notes
  105.     AH = identifier of program which is to handle the interrupt
  106.        00h-7Fh reserved for DOS
  107.        C0h-FFh reserved for applications
  108.     AL is the function code
  109. This is a general mechanism for verifying the presence of a TSR and 
  110. communicating with it.
  111. ---------------------------------------------
  112. INT 2F - Multiplex - BMB Compuscience Canada Utilities Interface
  113.     AH = xx (dynamically assigned based upon a search for a multiplex
  114.          number which doesn't answer installed)
  115.     AL = 00h install check
  116.     ES:DI = EBEB:BEBE
  117. Return: AL = 00h not installed
  118.          01h not installed, not OK to install
  119.          FFh installed and if ES:DI != EBEB:BEBE then ES:DI will point
  120.          to a string 'BMB xxxx' where xxxx is a product name and
  121.          version
  122. ---------------------------------------------
  123. INT 2F - Multiplex - PRINT (DOS 3.1+) - GIVE PRINT A TIME SLICE
  124.     AX = 0080h
  125. Return: after PRINT executes
  126. ---------------------------------------------
  127. INT 2F - Multiplex - PRINT - INSTALLATION CHECK
  128.     AX = 0100h
  129. Return: AL =
  130.         00h not installed, OK to install
  131.         01h not installed, not OK to install
  132.         FFh installed
  133. ---------------------------------------------
  134. INT 2F - Multiplex - PRINT - SUBMIT FILE
  135.     AX = 0101h
  136.     DS:DX -> packet (see below)
  137. Return: CF set on error
  138.         AX = error code
  139.  
  140. Format of submit packet:
  141. Offset    Size    Description
  142.  00h    BYTE    level (must be 0)
  143.  01h    DWORD    pointer to ASCIZ filename (no wildcards)
  144. ---------------------------------------------
  145. INT 2F - Multiplex - PRINT - REMOVE FILE
  146.     AX = 0102h
  147.     DS:DX -> ASCIZ file name (wildcards allowed)
  148. Return: CF set on error
  149.         AX = error code
  150. ---------------------------------------------
  151. INT 2F - Multiplex - PRINT - REMOVE ALL FILES
  152.     AX = 0103h
  153. Return: CF set on error
  154.         AX = error code
  155. ---------------------------------------------
  156. INT 2F - Multiplex - PRINT - HOLD QUEUE/GET STATUS
  157.     AX = 0104h
  158. Return: CF set on error
  159.         AX = error code
  160.         01h function invalid
  161.         02h file not found
  162.         03h path not found
  163.         04h too many open files
  164.         05h access denied
  165.         08h queue full
  166.         09h spooler busy
  167.         0Ch name too long
  168.         0Fh drive invalid
  169.     DX = error count
  170.     DS:SI -> print queue (null-string terminated list of 64-byte ASCIZ 
  171.          file names)
  172. ---------------------------------------------
  173. INT 2F - Multiplex - PRINT - RESTART QUEUE
  174.     AX = 0105h
  175. Return: CF set on error
  176.        AX = error code
  177. ---------------------------------------------
  178. INT 2F - Multiplex - PRINT (DOS 3.3) - CHECK IF OUTPUT DEVICE READY???
  179.     AX = 0106h
  180.     ???
  181. Return: ???
  182. Note: eventually calls device driver for spooled device with request 0Ah,
  183.       looping until not busy or timeout
  184. ---------------------------------------------
  185. INT 2F - Multiplex - PC LAN PROGRAM REDIR/REDIRIFS internal - INSTALL CHECK
  186.     AX = 0200h
  187. Return: AL = FFh if installed
  188. ---------------------------------------------
  189. INT 2F - Multiplex - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  190.     AX = 0201h
  191. Return: nothing???
  192. Note: called by DOS 3.3 PRINT.COM
  193. ---------------------------------------------
  194. INT 2F - Multiplex - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  195.     AX = 0202h
  196.     ???
  197. Return: nothing???
  198. Note: called by DOS 3.3 PRINT.COM
  199. ---------------------------------------------
  200. INT 2F - Multiplex - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  201.     AX = 0203h
  202. Return: nothing???
  203. Note: called by DOS 3.3 PRINT.COM
  204. ---------------------------------------------
  205. INT 2F - Multiplex - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  206.     AX = 0204h
  207.     ???
  208. Return: nothing???
  209. Note: called by DOS 3.3 PRINT.COM
  210. ---------------------------------------------
  211. INT 2F - Multiplex - PC LAN PROGRAM REDIR/REDIRIFS internal - ???
  212.     AX = 02xxh
  213.     ???
  214. Return: ???
  215. ---------------------------------------------
  216. INT 2F - Multiplex - DOS 3+ CRITICAL ERROR HANDLER - INSTALLATION CHECK
  217.     AX = 0500h
  218. Return: AL = 00h not installed, OK to install
  219.          01h not installed, can't install
  220.          FFh installed
  221. Note: this set of functions allows a user program to partially or completely
  222.       override the default critical error handler in COMMAND.COM
  223. ---------------------------------------------
  224. INT 2F - Multiplex - DOS 3+ CRITICAL ERROR HANDLER - HANDLE ERROR
  225.     AH = 05h
  226.     AL = extended error code (not zero)
  227. Return: CF clear
  228.         ES:DI -> ASCIZ error message
  229.         AL = ???
  230.     CF set: use default error handler
  231. Note:    called at start of COMMAND.COM's default critical error handler if 
  232.     installed by a user program, allowing partial or complete overriding
  233.     of the default error action
  234. ---------------------------------------------
  235. INT 2F - Multiplex - ASSIGN - INSTALLATION CHECK
  236.     AX = 0600h
  237. Return: AH <> 00h if installed
  238. ---------------------------------------------
  239. INT 2F - Multiplex - ASSIGN - GET MEMORY SEGMENT
  240.     AX = 0601h
  241. Return: ES = segment of ASSIGN work area
  242. ---------------------------------------------
  243. INT 2F - Multiplex - DRIVER.SYS support - INSTALLATION CHECK
  244.     AX = 0800h
  245. Return:    AL = 00h not installed, OK to install
  246.          01h not installed, not OK to install
  247.          FFh installed
  248. ---------------------------------------------
  249. INT 2F - Multiplex - DRIVER.SYS support - ADD NEW BLOCK DEVICE
  250.     AX = 0801h
  251.     DS:DI -> device driver header
  252. Note: moves down list of drivers, copying and modifying word at offset 29h
  253.     device driver appended to driver chain
  254. ---------------------------------------------
  255. INT 2F - Multiplex - DRIVER.SYS support - EXECUTE DEVICE DRIVER REQUEST
  256.     AX = 0802h
  257.     ES:BX -> device driver request header (see AX=1510h)
  258. Return: request header updated as per requested operation
  259. ---------------------------------------------
  260. INT 2F - Multiplex - SHARE - INSTALLATION CHECK
  261.     AX = 1000h
  262. Return: AL = 00h  not installed, OK to install
  263.          01h  not installed, not OK to install
  264.          FFh  installed
  265. Note: values of AL other than 00h appear to put DOS 3.3 SHARE into an infinite
  266.     loop
  267. ---------------------------------------------
  268. INT 2F - Multiplex - NETWORK REDIRECTOR - INSTALLATION CHECK
  269.     AX = 1100h
  270. Return: AL = 00h  not installed, OK to install
  271.          01h  not installed, not OK to install
  272.          FFh  installed
  273. Note:    In DOS 4+, the 11xx calls are all in IFSFUNC.EXE, not in the PC LAN
  274.     Program redirector. 
  275. ---------------------------------------------
  276. INT 2F - Multiplex - NETWORK REDIRECTOR - RMDIR???
  277.     AX = 1101h
  278.     ???
  279. Return: ???
  280. ---------------------------------------------
  281. INT 2F - Multiplex - NETWORK REDIRECTOR - MKDIR???
  282.     AX = 1103h
  283.     ???
  284. Return: CF set on error
  285.         AX = DOS error code (see INT 21/AH=59h)
  286. ---------------------------------------------
  287. INT 2F - Multiplex - NETWORK REDIRECTOR - ???
  288.     AX = 1105h
  289.     ???
  290. Return: ???
  291. ---------------------------------------------
  292. INT 2F - Multiplex - NETWORK REDIRECTOR - CLOSE REMOTE FILE
  293.     AX = 1106h
  294.     ???
  295. Return: ???
  296. ---------------------------------------------
  297. INT 2F - Multiplex - NETWORK REDIRECTOR - ???
  298.     AX = 1107h
  299.     ???
  300. Return: ???
  301. ---------------------------------------------
  302. INT 2F - Multiplex - NETWORK REDIRECTOR - READ FROM REMOTE FILE
  303.     AX = 1108h
  304.     ???
  305. Return: ???
  306. ---------------------------------------------
  307. INT 2F - Multiplex - NETWORK REDIRECTOR - WRITE TO REMOTE FILE
  308.     AX = 1109h
  309.     ???
  310. Return: ???
  311. ---------------------------------------------
  312. INT 2F - Multiplex - NETWORK REDIRECTOR - LOCK REGION OF FILE
  313.     AX = 110Ah
  314.     BX = file handle
  315.     CX:DX = starting offset
  316.     SI = high word of size
  317.     STACK: WORD low word of size
  318. Return: CF set on error
  319.        AL = DOS error code (see INT 21/AH=59h)
  320.     STACK unchanged
  321. ---------------------------------------------
  322. INT 2F - Multiplex - NETWORK REDIRECTOR - UNLOCK REGION OF FILE
  323.     AX = 110Bh
  324.     BX = file handle
  325.     CX:DX = starting offset
  326.     SI = high word of size
  327.     STACK: WORD low word of size
  328. Return: CF set on error
  329.        AL = DOS error code (see INT 21/AH=59h)
  330.     STACK unchanged
  331. ---------------------------------------------
  332. INT 2F - Multiplex - NETWORK REDIRECTOR - GET DISK SPACE
  333.     AX = 110Ch
  334.     ???
  335. Return: AL = sectors per cluster
  336.     BX = total clusters
  337.     CX = bytes per sector
  338.     DX = number of available clusters
  339. ---------------------------------------------
  340. INT 2F - Multiplex - NETWORK REDIRECTOR - SET REMOTE FILE'S ATTRIBUTES
  341.     AX = 110Eh
  342.     ???
  343.     STACK: WORD new file attributes
  344. Return: ???
  345. ---------------------------------------------
  346. INT 2F - Multiplex - NETWORK REDIRECTOR - GET REMOTE FILE'S ATTRIBUTES
  347.     AX = 110Fh
  348.     ???
  349. Return: AX = file attributes
  350. ---------------------------------------------
  351. INT 2F - Multiplex - NETWORK REDIRECTOR - RENAME REMOTE FILE
  352.     AX = 1111h
  353.     ???
  354. Return: ???
  355. ---------------------------------------------
  356. INT 2F - Multiplex - NETWORK REDIRECTOR - DELETE REMOTE FILE???
  357.     AX = 1113h
  358.     ???
  359. Return: ???
  360. ---------------------------------------------
  361. INT 2F - Multiplex - NETWORK REDIRECTOR - OPEN EXISTING REMOTE FILE???
  362.     AX = 1116h
  363.     ???
  364. Return: ???
  365. ---------------------------------------------
  366. INT 2F - Multiplex - NETWORK REDIRECTOR - CREATE REMOTE FILE???
  367.     AX = 1117h
  368.     STACK: WORD ???
  369. Return: ???
  370. Note: one of AX=1117h and AX=1118h probably truncates an existing remote file
  371. ---------------------------------------------
  372. INT 2F - Multiplex - NETWORK REDIRECTOR - CREATE REMOTE FILE???
  373.     AX = 1118h
  374.     STACK: WORD ???
  375. Return: ???
  376. Note: one of AX=1117h and AX=1118h probably truncates an existing remote file
  377. ---------------------------------------------
  378. INT 2F - Multiplex - NETWORK REDIRECTOR - CHDIR???
  379.     AX = 1119h
  380.     ???
  381. Return: ???
  382. ---------------------------------------------
  383. INT 2F - Multiplex - NETWORK REDIRECTOR - FINDFIRST???
  384.     AX = 111Bh
  385.     ???
  386. Return: ???
  387. ---------------------------------------------
  388. INT 2F - Multiplex - NETWORK REDIRECTOR - FINDNEXT???
  389.     AX = 111Ch
  390.     ???
  391. Return: ???
  392. ---------------------------------------------
  393. INT 2F - Multiplex - NETWORK REDIRECTOR - CLOSE ALL REMOTE FILES FOR PROCESS???
  394.     AX = 111Dh
  395.     DS???
  396. Return: ???
  397. ---------------------------------------------
  398. INT 2F - Multiplex - NETWORK REDIRECTOR - DO REDIRECTION
  399.     AX = 111Eh
  400.     STACK: WORD function to execute
  401.         5F02h  get redirection list entry
  402.             BX = redirection list index
  403.             DS:SI -> 16-byte local device name buffer
  404.             ES:DI -> 128-byte network name buffer
  405.         5F03h  redirect device
  406.             BL = device type (see INT 21/AX=5F03h)
  407.             CX = stored parameter value
  408.             DS:SI -> ASCIZ source device name
  409.             ES:DI -> destination ASCIZ network path + ASCIZ passwd
  410.         5F04h  cancel redirection
  411.             DS:SI -> ASCIZ device name or network path
  412. Return: CF set on error
  413. ---------------------------------------------
  414. INT 2F - Multiplex - NETWORK REDIRECTOR - PRINTER SETUP
  415.     AX = 111Fh
  416.     STACK: WORD function
  417.         5E02h  set printer setup
  418.         5E03h  get printer setup
  419.         5E04h  ???
  420.         5E05h  ???
  421.         5E06h  ???
  422. Return: CF set on error
  423. ---------------------------------------------
  424. INT 2F - Multiplex - NETWORK REDIRECTOR - RESET DISKS AND FLUSH BUFFERS???
  425.     AX = 1120h
  426.     ???
  427. Return: ???
  428. ---------------------------------------------
  429. INT 2F - Multiplex - NETWORK REDIRECTOR - SEEK ON REMOTE FILE???
  430.     AX = 1121h
  431.     ???
  432. Return: CF set on error
  433.     CF clear if successful
  434.         DX:AX = new file position???
  435. ---------------------------------------------
  436. INT 2F - Multiplex - NETWORK REDIRECTOR - PROCESS TERMINATION HOOK???
  437.     AX = 1122h
  438.     ???
  439. Return: ???
  440. ---------------------------------------------
  441. INT 2F - Multiplex - NETWORK REDIRECTOR - ???
  442.     AX = 1123h
  443.     ???
  444. Return: CF set on error???
  445. ---------------------------------------------
  446. INT 2F - Multiplex - NETWORK REDIRECTOR - ???
  447.     AX = 1124h
  448.     ???
  449. Return: ???
  450. ---------------------------------------------
  451. INT 2F - Multiplex - NETWORK REDIRECTOR - ???
  452.     AX = 1125h
  453.     STACK: WORD ???
  454. Return: ???
  455.     CF set on error???
  456. ---------------------------------------------
  457. INT 2F - Multiplex - NETWORK REDIRECTOR - ???
  458.     AX = 1126h
  459.     ???
  460. Return: CF set on error???
  461. ---------------------------------------------
  462. INT 2F - Multiplex - DOS 3+ internal - INSTALLATION CHECK
  463.     AX = 1200h
  464. Return: AL = FFh (for compatibility with other INT 2F functions)
  465. ---------------------------------------------
  466. INT 2F - Multiplex - DOS 3+ internal - CLOSE CURRENT FILE???
  467.     AX = 1201h
  468.     STACK: WORD ???
  469. Return: BX???
  470.     CX???
  471.     ES:DI -> ???
  472. Note: can be called only while on DOS internal stack
  473. ---------------------------------------------
  474. INT 2F - Multiplex - DOS 3+ internal - GET INTERRUPT ADDRESS
  475.     AX = 1202h
  476.     STACK: WORD vector number
  477. Return: ES:BX -> interrupt vector
  478.     Stack unchanged
  479. ---------------------------------------------
  480. INT 2F - Multiplex - DOS 3+ internal - GET DOS DATA SEGMENT
  481.     AX = 1203h
  482. Return: DS = segment of IBMDOS
  483. ---------------------------------------------
  484. INT 2F - Multiplex - DOS 3+ internal - NORMALIZE PATH SEPARATOR
  485.     AX = 1204h
  486.     STACK: WORD character to normalize
  487. Return: AL = normalized character (forward slash turned to backslash)
  488.     Stack unchanged
  489. ---------------------------------------------
  490. INT 2F - Multiplex - DOS 3+ internal - OUTPUT CHARACTER
  491.     AX = 1205h
  492.     STACK: WORD character to output
  493. Return: Stack unchanged
  494. Note: can be called only from within DOS
  495. ---------------------------------------------
  496. INT 2F - Multiplex - DOS 3+ internal - INVOKE CRITICAL ERROR
  497.     AX = 1206h
  498. Return: AL = 0-3 for Abort, Retry, Ignore, Fail
  499. Note: can be called only from within DOS
  500. ---------------------------------------------
  501. INT 2F - Multiplex - DOS 3+ internal - MAKE DISK BUFFER MOST-RECENTLY USED
  502.     AX = 1207h
  503.     DS:DI -> disk buffer
  504. Return: buffer moved to end of buffer list (least-recently used is first)
  505. Note: can be called only from within DOS
  506. ---------------------------------------------
  507. INT 2F - Multiplex - DOS 3+ internal - DECREMENT WORD
  508.     AX = 1208h
  509.     ES:DI -> word to decrement
  510. Return: AX = new value of word
  511.     word pointed to by ES:DI decremented, skipping zero
  512. ---------------------------------------------
  513. INT 2F - Multiplex - DOS 3+ internal - FLUSH AND FREE DISK BUFFER
  514.     AX = 1209h
  515.     DS:DI -> disk buffer
  516. Return: disk buffer marked unused, contents written to disk if buffer dirty
  517. Note: can be called only from within DOS
  518. ---------------------------------------------
  519. INT 2F - Multiplex - DOS 3+ internal - ???
  520.     AX = 120Ah
  521.     ???
  522. Return: CF set on error???
  523.     AL = ???
  524. Note: can be called only from within DOS
  525. ---------------------------------------------
  526. INT 2F - Multiplex - DOS 3+ internal - ???
  527.     AX = 120Bh
  528.     ES:DI -> system file table entry???
  529.     ???
  530. Return: CF set on error
  531.         AX = error code (20h)
  532.     CF clear if successful
  533. Note: can be called only from within DOS, performs AX=120Ah routine if file
  534.     opened in compatibility mode with inheritance allowed
  535. ---------------------------------------------
  536. INT 2F - Multiplex - DOS 3+ internal - ???
  537.     AX = 120Ch
  538.     ???
  539. Return: ???
  540. Note: can be called only from within DOS
  541.       seems to change owner of last-accessed file to calling process
  542. ---------------------------------------------
  543. INT 2F - Multiplex - DOS 3+ internal - GET DATE AND TIME
  544.     AX = 120Dh
  545. Return: AX = current date in packed format (see INT 21/AX=5700h)
  546.     DX = current time in packed format (see INT 21/AX=5700h)
  547. Note: can be called only from within DOS
  548. ---------------------------------------------
  549. INT 2F - Multiplex - DOS 3+ internal - FREE ALL DISK BUFFERS
  550.     AX = 120Eh
  551. Return: DS:DI -> first disk buffer
  552. Note: can be called only from within DOS
  553. ---------------------------------------------
  554. INT 2F - Multiplex - DOS 3+ internal - MAKE BUFFER MOST RECENTLY USED
  555.     AX = 120Fh
  556.     DS:DI -> disk buffer
  557. Return: DS:DI -> next buffer in buffer list
  558. Note: can be called only from within DOS
  559. ---------------------------------------------
  560. INT 2F - Multiplex - DOS 3+ internal - FIND FREE DISK BUFFER
  561.     AX = 1210h
  562.     DS:DI -> first disk buffer to check
  563. Return: DS:DI -> first available disk buffer
  564.     ZF clear if found, set if not found
  565. ---------------------------------------------
  566. INT 2F - Multiplex - DOS 3+ internal - NORMALIZE ASCIZ FILENAME
  567.     AX = 1211h
  568.     DS:SI -> ASCIZ filename to normalize
  569.     ES:DI -> buffer for normalized filename
  570. Return: destination buffer filled with uppercase filename, with slashes turned
  571.     to backslashes
  572. ---------------------------------------------
  573. INT 2F - Multiplex - DOS 3+ internal - GET LENGTH OF ASCIZ STRING
  574.     AX = 1212h
  575.     ES:DI -> ASCIZ string
  576. Return: CX = length of string
  577. ---------------------------------------------
  578. INT 2F - Multiplex - DOS 3+ internal - UPPERCASE CHARACTER
  579.     AX = 1213h
  580.     STACK: WORD character to convert to uppercase
  581. Return: AL = uppercase character
  582.     Stack unchanged
  583. ---------------------------------------------
  584. INT 2F - Multiplex - DOS 3+ internal - COMPARE FAR POINTERS
  585.     AX = 1214h
  586.     DS:SI = first pointer
  587.     ES:DI = second pointer
  588. Return: ZF set if pointers are equal, ZF clear if not equal
  589. ---------------------------------------------
  590. INT 2F - Multiplex - DOS 3+ internal - FLUSH BUFFER
  591.     AX = 1215h
  592.     DS:DI -> disk buffer
  593.     STACK: WORD drives for which to skip buffer
  594.         ignore buffer if drive same as high byte, or bytes differ and
  595.         the buffer is for a drive OTHER than that given in low byte
  596. Return: Stack unchanged
  597. Note: can be called only from within DOS
  598. ---------------------------------------------
  599. INT 2F - Multiplex - DOS 3+ internal - GET ADDRESS OF SYSTEM FCB
  600.     AX = 1216h
  601.     BX = system file table entry number
  602. Return: ES:DI -> system file table entry
  603. ---------------------------------------------
  604. INT 2F - Multiplex - DOS 3+ internal - SET DEFAULT DRIVE ???
  605.     AX = 1217h
  606.     STACK: WORD drive (0 = A:, 1 = B:, etc)
  607. Return: CF set on error
  608.         (drive > LASTDRIVE)
  609.     CF clear if successful
  610.         DS:SI -> drive data block for specified drive
  611.         Stack unchanged
  612. Note: can be called only from within DOS
  613. ---------------------------------------------
  614. INT 2F - Multiplex - DOS 3+ internal - GET CALLER'S REGISTERS
  615.     AX = 1218h
  616. Return: DS:SI -> saved caller's AX,BX,CX,DX,SI,DI,BP,DS,ES (on stack)
  617. Note: only valid while within DOS
  618. ---------------------------------------------
  619. INT 2F - Multiplex - DOS 3+ internal - ???
  620.     AX = 1219h
  621.     STACK: WORD drive (0 = default, 1 = A:, etc)
  622. Return: ???
  623.     Stack unchanged
  624. Note: can be called only from within DOS
  625.     calls function 1217h
  626. ---------------------------------------------
  627. INT 2F - Multiplex - DOS 3+ internal - GET FILE'S DRIVE
  628.     AX = 121Ah
  629.     DS:SI -> filename
  630. Return: AL = drive (0 = default, 1 = A:, etc, FFh = invalid)
  631. ---------------------------------------------
  632. INT 2F - Multiplex - DOS 3+ internal - SET YEAR/LENGTH OF FEBRUARY
  633.     AX = 121Bh
  634.     CL = year - 1980
  635. Return: AL = number of days in February
  636. Note: requires DS to be set to the DOS code segment
  637. ---------------------------------------------
  638. INT 2F - Multiplex - DOS 3+ internal - CHECKSUM MEMORY
  639.     AX = 121Ch
  640.     DS:SI -> start of memory to checksum
  641.     CX = number of bytes
  642.     DX = initial checksum
  643. Return: DX = checksum
  644. Note: can be called only from within DOS
  645. ---------------------------------------------
  646. INT 2F - Multiplex - DOS 3+ internal - SUM MEMORY
  647.     AX = 121Dh
  648.     DS:SI -> memory to add up
  649.     CX = 0000h
  650.     DX = limit
  651. Return: AL = byte which exceeded limit
  652.     CX = number of bytes before limit exceeded
  653.     DX = remainder after adding first CX bytes
  654. ---------------------------------------------
  655. INT 2F - Multiplex - DOS 3+ internal - COMPARE FILENAMES
  656.     AX = 121Eh
  657.     DS:SI -> first ASCIZ filename
  658.     ES:DI -> second ASCIZ filename
  659. Return: ZF set if filenames equivalent, ZF clear if not
  660. ---------------------------------------------
  661. INT 2F - Multiplex - DOS 3+ internal - BUILD DRIVE INFO BLOCK
  662.     AX = 121Fh
  663.     STACK: WORD drive letter
  664. Return: ES:DI -> drive info block (will be overwritten by next call)
  665.     Stack unchanged
  666. Note: can be called only from within DOS
  667. ---------------------------------------------
  668. INT 2F - Multiplex - DOS 3+ internal - GET SYSTEM FILE TABLE NUMBER
  669.     AX = 1220h
  670.     BX = file handle
  671. Return: CF set on error
  672.         AL = 6 (invalid file handle)
  673.     CF clear if successful
  674.         BYTE ES:[DI] = system file table entry number for file handle
  675. ---------------------------------------------
  676. INT 2F - Multiplex - DOS 3+ internal - ???
  677.     AX = 1221h
  678.     DS:SI -> ???
  679. Return: ???
  680. Note: can be called only from within DOS
  681. ---------------------------------------------
  682. INT 2F - Multiplex - DOS 3+ internal - SET EXTENDED ERROR INFO???
  683.     AX = 1222h
  684.     SS:SI -> 4-byte records
  685.         BYTE    error code, FFh = last record
  686.         BYTE    ??? FFh = don't change
  687.         BYTE    ??? FFh = don't change
  688.         BYTE    ??? FFh = don't change
  689. Return: nothing???
  690. Note: can be called only from within DOS
  691. ---------------------------------------------
  692. INT 2F - Multiplex - DOS 3+ internal - CHECK IF CHARACTER DEVICE???
  693.     AX = 1223h
  694.     ???
  695. Return: DS:SI -> device driver with same name as ???
  696. Note: can be called only from within DOS
  697. ---------------------------------------------
  698. INT 2F - Multiplex - DOS 3+ internal - DELAY
  699.     AX = 1224h
  700. Return: after delay of ??? ms
  701. Note: can be called only from within DOS
  702. ---------------------------------------------
  703. INT 2F - Multiplex - DOS 3+ internal - GET LENGTH OF ASCIZ STRING
  704.     AX = 1225h
  705.     DS:SI -> ASCIZ string
  706. Return: CX = length of string
  707. ---------------------------------------------
  708. INT 2F - Multiplex - DOS 3.3+ internal - ???
  709.     AX = 1226h
  710.     CL = ???
  711. Return: ???
  712. Note: can be called only from within DOS
  713. ---------------------------------------------
  714. INT 2F - Multiplex - DOS 3.3+ internal - GET SYSTEM FILE TABLE FOR FILE???
  715.     AX = 1227h
  716.     BX = file handle
  717. Return: AL = 6 invalid file handle
  718.     ???
  719. Note: can be called only from within DOS
  720. ---------------------------------------------
  721. INT 2F - Multiplex - DOS 3.3+ internal - ???
  722.     AX = 1228h
  723.     BP = ???
  724. Return: ???
  725. Note: can be called only from within DOS
  726. ---------------------------------------------
  727. INT 2F - Multiplex - DOS 3.3+ internal - GET SYSTEM FILE TABLE ENTRY FOR FILE
  728.     AX = 1229h
  729.     BX = file handle
  730. Return: ES:DI -> system file table entry for file (see INT 21/AH=52h)
  731. Note: can be called only from within DOS
  732. ---------------------------------------------
  733. INT 2F - Multiplex - DOS 3.3+ internal - SET FASTOPEN ENTRY POINT
  734.     AX = 122Ah
  735.     BX = (DOS 4+) entry point to set (0001h or 0002h)
  736.     DS:SI -> FASTOPEN entry point
  737. Return: CF set if entry point already set
  738. ---------------------------------------------
  739. INT 2F - Multiplex - DOS 3.3+ internal - ???
  740.     AX = 122Bh
  741.     DS:SI -> ???
  742.     STACK: WORD ???
  743. Return: ???
  744.     STACK unchanged
  745. Note: can be called only from within DOS
  746. ---------------------------------------------
  747. INT 2F - Multiplex - DOS 3.3+ internal - GET DEVICE CHAIN
  748.     AX = 122Ch
  749. Return: BX:AX -> header of second device driver (NUL is first) in driver chain
  750. ---------------------------------------------
  751. INT 2F - Multiplex - DOS 3.3+ internal - ???
  752.     AX = 122Dh
  753. Return: AX = ??? (value of some flag or counter)
  754. ---------------------------------------------
  755. INT 2F - Multiplex - DOS 4.00 internal - GET ???
  756.     AX = 122Eh
  757.     DL = subfunction: 00, 02, 04, 06 or 08h
  758. Return: ES:DI set to ???
  759. ---------------------------------------------
  760. INT 2F - Multiplex - DOS 3.3+ - SET ???
  761.     AH = 13h
  762.     DS:DX -> ???
  763.     ES:BX -> ???
  764. Return: DS:DX from previous invocation of this function
  765.     ES:BX from previous invocation of this function
  766. ---------------------------------------------
  767. INT 2F - Multiplex - NLSFUNC.COM - INSTALLATION CHECK
  768.     AX = 1400h
  769. Return: AL = 00h not installed, OK to install
  770.          01h not installed, not OK
  771.          FFh installed
  772. ---------------------------------------------
  773. INT 2F - Multiplex - NLSFUNC.COM - ???
  774.     AX = 1401h
  775.     DS:SI -> ???
  776.     BX = ???
  777.     DX = ???
  778. Return: ???
  779. Note: calls INT 2F/AX=1227h under certain circumstances
  780. ---------------------------------------------
  781. INT 2F - Multiplex - NLSFUNC.COM - ???
  782.     AX = 1402h
  783.     BP = ???
  784.     DS:SI -> ???
  785. Return: ???
  786. Note: calls INT 2F/AX=1227h under certain circumstances
  787. ---------------------------------------------
  788. INT 2F - Multiplex - NLSFUNC.COM - ???
  789.     AX = 1403h
  790.     DS:SI -> ???
  791.     BX = ???
  792.     DX = ???
  793. Return: ???
  794. Note: in DOS 3.3, appears to be identical to subfunction 01h
  795. ---------------------------------------------
  796. INT 2F - Multiplex - CDROM - INSTALLATION CHECK
  797.     AX = 1500h
  798.     BX = 0000h
  799. Return: BX = number of CDROM drive letters used
  800.     CX = strating drive letter (0=A:)
  801. Note: this installation check DOES NOT follow the format used by other software
  802. ---------------------------------------------
  803. INT 2F - Multiplex - CDROM - GET DRIVE DEVICE LIST
  804.     AX = 1501h
  805.     ES:BX -> bufer to hold drive letter list (5 bytes per drive letter)
  806. Return: buffer filled, for each drive letter
  807.       BYTE    subunit number in driver
  808.       DWORD address of device driver header
  809. ---------------------------------------------
  810. INT 2F - Multiplex - CDROM - GET COPYRIGHT FILE NAME
  811.     AX = 1502h
  812.     ES:BX -> 38-byte buffer for name of copyright file
  813.     CX = drive number (0=A:)
  814. Return: CF set if drive is not a CDROM drive
  815.         AX = 15 (invalid drive)
  816. ---------------------------------------------
  817. INT 2F - Multiplex - CDROM - GET ABSTRACT FILE NAME
  818.     AX = 1503h
  819.     ES:BX -> 38-byte buffer for name of abstract file
  820.     CX = drive number (0=A:)
  821. Return: CF set if drive is not a CDROM drive
  822.         AX = 15 (invalid drive)
  823. ---------------------------------------------
  824. INT 2F - Multiplex - CDROM - GET BIBLIOGRAPHIC DOC FILE NAME
  825.     AX = 1504h
  826.     ES:BX -> 38-byte buffer for name of bibliographic documentation file
  827.     CX = drive number (0=A:)
  828. Return: CF set if drive is not a CDROM drive
  829.         AX = 15 (invalid drive)
  830. ---------------------------------------------
  831. INT 2F - Multiplex - CDROM - READ VTOC
  832.     AX = 1505h
  833.     ES:BX -> 2048-byte buffer
  834.     CX = drive number (0=A:)
  835.     DX = sector index (0=first volume descriptor,1=second,...)
  836. Return: CF set on error
  837.         AX = error code (15=invalid drive,21=not ready)
  838.     CF clear if successful
  839.         AX = volume descriptor type (1=standard,FFh=terminator,0=other)
  840. ---------------------------------------------
  841. INT 2F - Multiplex - CDROM - TURN DEBUGGING ON
  842.     AX = 1506h
  843.     BX = debugging function to enable
  844. Note: reserved for development
  845. ---------------------------------------------
  846. INT 2F - Multiplex - CDROM - TURN DEBUGGING OFF
  847.     AX = 1507h
  848.     BX = debugging function to disable
  849. Note: reserved for development
  850. ---------------------------------------------
  851. INT 2F - Multiplex - CDROM - ABSOLUTE DISK READ
  852.     AX = 1508h
  853.     ES:BX -> buffer
  854.     CX = drive number (0=A:)
  855.     SI:DI = starting sector number
  856.     DX = number of sectors to read
  857. Return: CF set on error
  858.         AL = error code (15=invalid drive,21=not ready)
  859. ---------------------------------------------
  860. INT 2F - Multiplex - CDROM - ABSOLUTE DISK WRITE
  861.     AX = 1509h
  862.     ES:BX -> buffer
  863.     CX = drive number (0=A:)
  864.     SI:DI = starting sector number
  865.     DX = number of sectors to write
  866. Note: corresponds to INT 26h and is currently reserved and nonfunctional
  867. ---------------------------------------------
  868. INT 2F - Multiplex - CDROM - RESERVED
  869.     AX = 150Ah
  870. ---------------------------------------------
  871. INT 2F - Multiplex - CDROM 2.00 - DRIVE CHECK
  872.     AX = 150Bh
  873.     CX = drive number (0=A:)
  874. Return: BX = ADADh if MSCDEX.EXE installed
  875.         AX = 0000h if drive not supported
  876.         nonzero if supported
  877. ---------------------------------------------
  878. INT 2F - Multiplex - CDROM 2.00 - GET MSCDEX.EXE VERSION
  879.     AX = 150Ch
  880. Return: BH = major version
  881.     BL = minor version
  882. Note: MSCDEX.EXE versions prior to 1.02 return BX=0
  883. ---------------------------------------------
  884. INT 2F - Multiplex - CDROM 2.00 - GET CDROM DRIVE LETTERS
  885.     AX = 150Dh
  886.     ES:BX -> buffer for drive letter list (1 byte per drive)
  887. Return: buffer filled with drive numbers (0=A:).  Each byte corresponds
  888.     to the drive in the same position for function 1501h
  889. ---------------------------------------------
  890. INT 2F - Multiplex - CDROM 2.00 - GET/SET VOLUME DESCRIPTOR PREFERENCE
  891.     AX = 150Eh
  892.     BX = subfunction
  893.         00h get preference
  894.         DX = 0000h
  895.         Return: DX = preference settings
  896.         01h set preference
  897.         DH = volume descriptor preference
  898.             01h = primary volume descriptor
  899.             02h = supplementary volume descriptor
  900.         DL = supplementary volume descriptor preference
  901.             01h = shift-Kanji
  902.     CX = drive number (0=A:)
  903. Return: CF set on error
  904.         AX = error code (15=invalid drive,1=invalid function)
  905. ---------------------------------------------
  906. INT 2F - Multiplex - CDROM 2.00 - GET DIRECTORY ENTRY
  907.     AX = 150Fh
  908.     CX = drive number (0=A:)
  909.     ES:BX -> ASCIZ path name
  910.     SI:DI -> 255-byte buffer for directory entry
  911. Return: CF set on error
  912.         AX = error code
  913.     CF clear if succesful
  914.         AX = disk format (0=High Sierra,1=ISO 9660)
  915.  
  916. Format of directory entry:
  917. Offset    Size    Description
  918.  00h    BYTE  length of directory entry
  919.  01h    BYTE  length of XAR in LBN's (don't ask me what that means...)
  920.  02h    DWORD LBN of data, Intel (little-endian) format
  921.  06h    DWORD LBN of data, Motorola (big-endian) format
  922.  0Ah    DWORD length of file, Intal format
  923.  0Eh    DWORD length of file, Motorola format
  924. ---High Sierra---
  925.  12h  6 BYTEs date and time
  926.  18h    BYTE  bit flags
  927.  19h    BYTE  reserved
  928. ---ISO 9660---
  929.  12h  7 BYTEs date and time
  930.  19h    BYTE  bit flags
  931. ---both formats---
  932.  1Ah    BYTE  interleave size
  933.  1Bh    BYTE  interleave skip factor
  934.  1Ch    WORD  volume set sequence number, Intel format
  935.  1Eh    WORD  volume set sequence number, Motorola format
  936.  20h    BYTE  length of file name
  937.  21h  N BYTEs file name
  938.     BYTE (optional) padding if filename is odd length
  939.       N BYTEs system data
  940. ---------------------------------------------
  941. INT 2F - Multiplex - CDROM 2.10 - SEND DEVICE DRIVER REQUEST
  942.     AX = 1510h
  943.     CX = CD-ROM drive letter (0 = A, 1 = B, etc)
  944.     ES:BX -> CD-ROM device driver request header (see below)
  945.  
  946. Format of device driver request header:
  947. Offset    Size    Description
  948.  00h    BYTE    length of request header
  949.  01h    BYTE    subunit within device driver
  950.  02h    BYTE    command code (see below)
  951.  03h    WORD    status (filled in by device driver)
  952.         bit 15: error
  953.         bits 14-10: reserved
  954.         bit 9: busy
  955.         bit 8: done
  956.         bits 7-0: error code if bit 15 set (see below)
  957.  05h  8 BYTEs    reserved
  958.  0Dh        any additional information starts here
  959.  
  960. Values for command code:
  961.     00h INIT
  962.     01h MEDIA CHECK (block devices)
  963.     02h BUILD BPB (block devices)
  964.     03h IOCTL INPUT
  965.     04h INPUT
  966.     05h NONDESTRUCTIVE INPUT, NO WAIT
  967.     06h INPUT STATUS
  968.     07h INPUT FLUSH
  969.     08h OUTPUT
  970.     09h OUTPUT WITH VERIFY
  971.     0Ah OUTPUT STATUS
  972.     0Bh OUTPUT FLUSH
  973.     0Ch IOCTL OUTPUT
  974.     0Dh (DOS 3+) DEVICE OPEN
  975.     0Eh (DOS 3+) DEVICE CLOSE
  976.     0Fh (DOS 3+) REMOVABLE MEDIA (block devices)
  977.     10h (DOS 3+) OUTPUT UNTIL BUSY
  978.     11h unused???
  979.     12h unused???
  980.     13h (DOS 3.2+) GENERIC IOCTL
  981.     14h unused???
  982.     15h unused???
  983.     16h unused???
  984.     17h (DOS 3.2+) GET LOGICAL DEVICE
  985.     18h (DOS 3.2+) SET LOGICAL DEVICE
  986.     80h (CD-ROM) READ LONG
  987.     81h (CD-ROM) reserved
  988.     82h (CD-ROM) READ LONG PREFETCH
  989.     83h (CD-ROM) SEEK
  990.     84h (CD-ROM) PLAY AUDIO
  991.     85h (CD-ROM) STOP AUDIO
  992.     86h (CD-ROM) WRITE LONG
  993.     87h (CD-ROM) WRITE LONG VERIFY
  994.     88h (CD-ROM) RESUME AUDIO
  995.  
  996. Values for error code:
  997.     00h write-protect violation
  998.     01h unknown unit
  999.     02h drive not ready
  1000.     03h unknown command
  1001.     04h CRC error
  1002.     05h bad drive request structure length
  1003.     06h seek error
  1004.     07h unknown media
  1005.     08h sector not found
  1006.     09h printer out of paper
  1007.     0Ah write fault
  1008.     0Bh read fault
  1009.     0Ch general failure
  1010.     0Dh reserved
  1011.     0Eh reserved
  1012.     0Fh invalid disk change
  1013. ---------------------------------------------
  1014. INT 2F - Multiplex - DOS 4.0 SHELLB.COM - INSTALLATION CHECK
  1015.     AX = 1900h
  1016. Return: AL = 00h  not installed
  1017.          FFh  installed
  1018. ---------------------------------------------
  1019. INT 2F - Multiplex - DOS 4.0 SHELLB.COM - SHELLC.EXE INTERFACE
  1020.     AX = 1901h
  1021.     BL = 00h if SHELLC transient
  1022.          01h if SHELLC resident
  1023.     DS:DX -> far call entry point for resident SHELLC.EXE
  1024. Return: ES:DI -> SHELLC.EXE workspace within SHELLB.COM
  1025. Note: SHELLB.COM and SHELLC.EXE are parts of the DOS 4.x shell
  1026. ---------------------------------------------
  1027. INT 2F - Multiplex - DOS 4.0 SHELLB.COM - COMMAND.COM INTERFACE
  1028.     AX = 1902h
  1029.     ES:DI -> ASCIZ full filename of current batch file, with at least the
  1030.          final filename element uppercased
  1031.     DS:DX -> buffer for results
  1032. Return: AL = 00h  failed, either
  1033.           (a) final filename element quoted at ES:DI does not match
  1034.               identity of shell batch file quoted as parameter of most
  1035.               recent call of SHELLB command, or
  1036.           (b) no more Program Start Commands available.
  1037.     AL= FFh  success, then:
  1038.         memory at DS:[DX+1] onwards filled as:
  1039.         DX+1:    BYTE    count of bytes of PSC
  1040.         DX+2: N BYTEs    Program Start Command text
  1041.             BYTE    0Dh terminator 
  1042. Explanation: COMMAND.COM executes the result of this call in preference to 
  1043.     reading a command from a batch file. Thus the batch file does not
  1044.     advance in execution for so long as SHELLB provides PSCs from its
  1045.     workspace. The PSCs are planted in SHELLB workspace by SHELLC, the user
  1046.     menu interface. The final PSC of a sequence is finished with a 
  1047.     GOTO COMMON, which causes a loop back in the batch file which called
  1048.     SHELLC so as to execute SHELLC again. The check on batch file name
  1049.     permits PSCs to CALL nested batch files while PSCs are still stacked
  1050.     up for subsequent execution.
  1051. ---------------------------------------------
  1052. INT 2F - Multiplex - DOS 4.0 SHELLB.COM - COMMAND.COM interface
  1053.     AX = 1903h
  1054.     ES:DI -> ASCIZ batch file name as for AX=1902h
  1055. Return: AL = FFh if quoted batch file name matches last SHELLB parameter
  1056.     AL = 00h if it does not
  1057. ---------------------------------------------
  1058. INT 2F - Multiplex - DOS 4.0 SHELLB.COM - SHELLB.COM transient to TSR interface
  1059.     AX = 1904h
  1060. Return: ES:DI -> name of current shell batch file:
  1061.         WORD    number of bytes of name following
  1062.         BYTEs    (8 max) uppercase name of shell batch file
  1063. ---------------------------------------------
  1064. INT 2F - Multiplex - DOS 4+ ANSI.SYS internal - INSTALLATION CHECK
  1065.     AX = 1A00h
  1066. Return: AL = FFh if installed
  1067. ---------------------------------------------
  1068. INT 2F - Multiplex - DOS 4+ ANSI.SYS internal - GET/SET DISPLAY INFORMATION
  1069.     AX = 1A01h
  1070.     CL = 7Fh for GET
  1071.        = 5Fh for SET
  1072.     DS:DX -> parm block as for INT 21, AX=440C, CX=037F/035F respectively
  1073. Return: CF set on error
  1074.         AX = error code (many non-standard)
  1075.     CF clear if successful
  1076.         AX destroyed
  1077. Note:    Presumably this is the DOS IOCTL interface to ANSI.SYS
  1078. ---------------------------------------------
  1079. INT 2F - Multiplex - DOS 4+ ANSI.SYS internal - MISC REQUESTS
  1080.     AX = 1A02h
  1081.     DS:DX -> parameter block
  1082.         BYTE  subfunction
  1083.             00h set/reset interlock
  1084.             DS:[DX+1] BYTE 00h=reset, 01h=set
  1085.             This interlock prevents some of the ANSI.SYS post-
  1086.             processing in its hook onto INT 10, AH=00h mode set
  1087.             01h get /L flag
  1088.             Result: DS:[DX+2] BYTE = 00h if /L not in effect
  1089.                            = 01h if /L in effect
  1090. ---------------------------------------------
  1091. INT 2F - Multiplex - DOS 4+ XMA2EMS.SYS extension internal - INSTALLATION CHECK
  1092.     AX = 1B00h
  1093. Return: AL = FFh if installed
  1094. Note: XMA2EMS.SYS extension is only installed if DOS has page frames to hide.
  1095.       This extension hooks onto INT 67 AH=58h and returns from that call data
  1096.       which excludes the physical pages being used by DOS.
  1097. ---------------------------------------------
  1098. INT 2F - Multiplex - DOS 4+ XMA2EMS.SYS extens internal - GET HIDDEN FRAME INFO
  1099.     AX = 1B01h
  1100.     DI = hidden physical page number
  1101. Return: AX = FFFFh if failed (no such hidden page)
  1102.     AX = 0000h if OK, then
  1103.          ES = segment of page frame
  1104.          DI = physical page number
  1105. Note: This corresponds to the data edited out of the INT 67 AH=58h call
  1106. ---------------------------------------------
  1107. INT 2F - Multiplex - XMS - INSTALLATION CHECK
  1108.     AX = 4300h
  1109. Return: AL = 80h XMS driver installed
  1110.     AL <> 80h no driver
  1111. Note: XMS gives access to extended memory and noncontiguous/nonEMS memory
  1112.       above 640K
  1113. ---------------------------------------------
  1114. INT 2F - Multiplex - XMS - GET DRIVER ADDRESS
  1115.     AX = 4310h
  1116. Return: ES:BX -> driver entry point
  1117.  
  1118. Perform a FAR call to the driver entry point with AH set to the function code
  1119.     AH    function
  1120.     00h  Get XMS version number
  1121.          Return: AX = XMS version (in BCD)
  1122.              BX = internal revision number
  1123.              DX = 0001h if HMA (1M to 1M + 64K) exists
  1124.               0000h if HMA does not exist
  1125.     01h  Request High Memory Area (1M to 1M + 64K)
  1126.          DX = memory in bytes (for TSR or device drivers)
  1127.           FFFFh if application program
  1128.          Return: AX = 0001h success
  1129.             = 0000h failure
  1130.                BL = error code (see below)
  1131.     02h  Release High Memory Area
  1132.          Return: AX = 0001h success
  1133.             = 0000h failure
  1134.                BL = error code (see below)
  1135.     03h  Global enable A20, for using the HMA
  1136.          Return: AX = 0001h success
  1137.             = 0000h failure
  1138.                BL = error code (see below)
  1139.     04h  Global disable A20
  1140.          Return: AX = 0001h success
  1141.             = 0000h failure
  1142.                BL = error code (see below)
  1143.     05h  Local enable A20, for direct access to extended memory
  1144.          Return: AX = 0001h success
  1145.             = 0000h failure
  1146.                BL = error code (see below)
  1147.     06h  Local disable A20
  1148.          Return: AX = 0001h success
  1149.             = 0000h failure
  1150.                BL = error code (see below)
  1151.     07h  Query A20 state
  1152.          Return: AX = 0001h enabled
  1153.             = 0000h disabled
  1154.              BL = error code (0 = successful)
  1155.     08h  Query free extended memory, not counting HMA
  1156.          Return: AX = size of largest extended memory block in K
  1157.              DX = total extended memory in K
  1158.              BL = error code (see below)
  1159.     09h  Allocate extended memory block
  1160.          DX = Kbytes needed
  1161.          Return: AX = 0001h success
  1162.                DX = handle for memory block
  1163.             = 0000h failure
  1164.                BL = error code (see below)
  1165.     0Ah  Free extended memory block
  1166.          DX = handle of block to free
  1167.          Return: AX = 0001h success
  1168.             = 0000h failure
  1169.                BL = error code (see below)
  1170.     0Bh  Move extended memory block
  1171.          DS:SI -> EMM structure (see below)
  1172.          Note: if either handle is 0000h, the corresponding offset is
  1173.            considered to be an absolute segment:offset address in
  1174.            directly addressable memory
  1175.          Return: AX = 0001h success
  1176.             = 0000h failure
  1177.                BL = error code (see below)
  1178.     0Ch  Lock extended memory block
  1179.          DX = handle of block to lock
  1180.          Return: AX = 0001h success
  1181.                DX:BX = 32-bit linear address of locked block
  1182.             = 0000h failure
  1183.                BL = error code (see below)
  1184.     0Dh  Unlock extended memory block
  1185.          DX = handle of block to unlock
  1186.          Return: AX = 0001h success
  1187.             = 0000h failure
  1188.                BL = error code (see below)
  1189.     0Eh  Get handle information
  1190.          DX = handle for which to get info
  1191.          Return: AX = 0001h success
  1192.                BH = block's lock count
  1193.                BL = number of free handles left
  1194.                DX = block size in K
  1195.             = 0000h failure
  1196.                BL = error code (see below)
  1197.     0Fh  Reallocate extended memory block
  1198.          DX = handle of block
  1199.          BX = new size of block in K
  1200.          Return: AX = 0001h success
  1201.             = 0000h failure
  1202.                BL = error code (see below)
  1203.     10h  Request upper memory block (nonEMS memory above 640K)
  1204.          DX = size of block in paragraphs
  1205.          Return: AX = 0001h success
  1206.                BX = segment address of UMB
  1207.                DX = actual size of block
  1208.             = 0000h failure
  1209.                BL = error code (see below)
  1210.                DX = largest available block
  1211.     11h  Release upper memory block
  1212.          DX = segment address of UMB to release
  1213.          Return: AX = 0001h success
  1214.             = 0000h failure
  1215.                BL = error code (see below)
  1216. Note: HIMEM.SYS requires at least 256 bytes free stack space
  1217.  
  1218. Format of EMM structure:
  1219. Offset    Size    Description
  1220.  00h    DWORD    number of bytes to move (must be even)
  1221.  04h    WORD    source handle
  1222.  06h    DWORD    offset into source block
  1223.  0Ah    WORD    destination handle
  1224.  0Ch    DWORD    offset into destination block
  1225.  
  1226. Error codes returned in BL:
  1227.     80h Function not implemented
  1228.     81h Vdisk was detected
  1229.     82h An A20 error occurred
  1230.     8Eh a general driver error
  1231.     8Fh unrecoverable driver error
  1232.     90h HMA does not exist
  1233.     91h HMA is already in use
  1234.     92h DX is less than the /HMAMIN= parameter
  1235.     93h HMA is not allocated
  1236.     94h A20 line still enabled
  1237.     A0h all extended memory is allocated
  1238.     A1h all available extended memory handles are allocated
  1239.     A2h Invalid handle
  1240.     A3h Source handle is invalid
  1241.     A4h Source offset is invalid
  1242.     A5h Destination handle is invalid
  1243.     A6h Destination offset is invalid
  1244.     A7h Length is invalid
  1245.     A8h Move has an invalid overlap
  1246.     A9h Parity error occurred
  1247.     AAh Block is not locked
  1248.     ABh Block is locked
  1249.     ACh Block lock count overflowed
  1250.     ADh Lock failed
  1251.     B0h Only a smaller UMB is available
  1252.     B1h No UMB's are available
  1253.     B2h UMB segment number is invalid
  1254. ---------------------------------------------
  1255. INT 2F - Multiplex - TesSeRact RAM-RESIDENT PROGRAM INTERFACE
  1256.     AX = 5453h
  1257.     BX = subfunction
  1258.         00h installation check
  1259.         DS:SI -> 8-char blank-padded name
  1260.         Return: AX = FFFFh installed
  1261.                 CX = ID number of already-installed copy
  1262.                = anything else, not installed
  1263.                 CX = ID number for TSR when installed
  1264.         01h get user parameters
  1265.         CX = TSR ID number
  1266.         Return: AX = 0000h successful
  1267.                ES:BX -> user parameter block (see below)
  1268.                = nonzero failed
  1269.         02h check if hotkey in use
  1270.         CL = scan code of hot key
  1271.         Return: AX = FFFFh hot key conflicts with another TSR
  1272.                  otherwise safe to use the hotkey
  1273.         03h replace default critical error handler
  1274.         CX = TSR ID number
  1275.         DS:SI -> new routine for INT 24h
  1276.         Return: AX = nonzero, unable to install new handler
  1277.         04h get internal data area
  1278.         CX = TSR ID number
  1279.         Return: AX = 0000h
  1280.                 ES:BX -> TSR's internal data area (see below)
  1281.                = nonzero, TSR not found
  1282.         05h set multiple hot keys
  1283.         CX = TSR ID number
  1284.         DL = number of additional hot keys to allocate
  1285.         DS:SI -> table of hot keys
  1286.             BYTE  hotkey scan code
  1287.             BYTE  hotkey shift state
  1288.             BYTE  flag value to pass to TSR (nonzero)
  1289.         Return: AX = nonzero, unable to install hot keys
  1290.         06h - 0Fh reserved
  1291.         10h enable TSR
  1292.         CX = TSR ID number
  1293.         Return: AX = nonzero, unable to enable
  1294.         11h disable TSR
  1295.         CX = TSR ID number
  1296.         Return: AX = nonzero, unable to disable
  1297.         12h unload TSR
  1298.         CX = TSR ID number
  1299.         Return: AX = nonzero, invalid TSR number
  1300.         Note: if any interrupts used by TSR have been grabbed by
  1301.             another TSR, the TesSeRact routines will wait until
  1302.             it is safe to remove the indicated TSR from memory
  1303.         13h restart TSR
  1304.         CX = TSR ID number of TSR which was unloaded but is still in
  1305.              memory
  1306.         Return: AX = nonzero, unable to restart TSR
  1307.         14h get status word
  1308.         CX = TSR ID number
  1309.         Return: AX = FFFFh invalid ID number
  1310.                = other, successful
  1311.                 BX = bit flags
  1312.         15h set status word
  1313.         CX = TSR ID number
  1314.         DX = new bit flags
  1315.         Return: AX = nonzero, unable to set status word
  1316.         16h get INDOS state at popup
  1317.         CX = TSR ID number
  1318.         Return: AX = 0000h successful
  1319.                 BX = value of INDOS flag
  1320.         17h - 1Fh reserved
  1321.         20h call user procedure
  1322.         CX = TSR ID number
  1323.         ES:DI -> user-defined data
  1324.         Return: AX = 0000h successful
  1325.         21h stuff keystrokes into keyboard buffer
  1326.         CX = TSR ID number
  1327.         DL = speed
  1328.             00h stuff keystrokes only when buffer is empty
  1329.             01h stuff up to four keystrokes per clock tick
  1330.             02h stuff up to 15 keystrokes per clock tick
  1331.         DH = scan code flag
  1332.             if zeor, buffer contains alternating ASCII and scan codes
  1333.             if nonzero, buffer contains only ASCII codes
  1334.         SI = number of keystrokes
  1335.         ES:DI -> buffer to stuff
  1336.         Return: AX = 0000h success
  1337.                  F0F0h user aborted with ^C or ^Break
  1338.                  other unable to stuff keystrokes
  1339.         22h (v1.10) trigger popup
  1340.         CX = TSR ID number
  1341.         Return: AX = 0000h success, TSR will either pop up or beep to
  1342.                    indicate that it is unable to pop up
  1343.                  nonzero invalid ID number
  1344.         23h (v1.10) invoke TSR's background function
  1345.         CX = TSR ID number
  1346.         Return: AX = 0000h success
  1347.                  FFFFh not safe to call background function
  1348.                  nonzero invalid ID number
  1349.         24h - 2Fh reserved
  1350. Note:    Borland's THELP.COM popup help system for Turbo Pascal and Turbo C
  1351.     fully supports the TesSeRact API, as do the SWAP?? programs by 
  1352.     Innovative Data Concepts.
  1353.  
  1354. Format of User Parameter Block:
  1355. Offset    Size    Description
  1356.  00h  8 BYTEs    blank-padded TSR name
  1357.  08h    WORD    TSR ID number
  1358.  0Ah    DWORD    bitmap of supported functions
  1359.  0Eh    BYTE    scan code of primary hotkey
  1360.             00h = pop up when shift states match
  1361.             FFh = no popup (if shift state also FFh)
  1362.  0Fh    BYTE    shift state of primary hotkey
  1363.             FFh = no popup (if scan code also FFh)
  1364.  10h    BYTE    number of secondary hotkeys
  1365.  11h    DWORD    pointer to extra hotkeys set by func 05h
  1366.  15h    WORD    current TSR status flags
  1367.  17h    WORD    PSP segment of TSR
  1368.  19h    DWORD    DTA for TSR
  1369.  1Dh    WORD    default DS for TSR
  1370.  1Fh    DWORD    stack at popup
  1371.  23h    DWORD    stack at background invocation
  1372.  
  1373. Format of TSR internal data area:
  1374. Offset    Size    Description
  1375.  00h    BYTE    revision level of TesSeRact library
  1376.  01h    BYTE    type of popup in effect
  1377.  02h    BYTE    INT 08 occurred since last invocation
  1378.  03h    BYTE    INT 13 occurred since last invocation
  1379.  04h    BYTE    active interrupts
  1380.  05h    BYTE    active soft interrupts
  1381.  06h    BYTE    DOS major version
  1382.  07h    BYTE    how long to wait before popping up
  1383.  08h    DWORD    pointer to INDOS flag
  1384.  0CH    DWORD    pointer to DOS critical error flag
  1385.  10h    WORD    PSP segment of interrupted program
  1386.  12h    WORD    PSP segment of prog interrupted by INT 28
  1387.  14h    DWORD    DTA of interrupted program
  1388.  18h    DWORD    DTA of program interrupted by INT 28
  1389.  1Ch    WORD    SS of interrupted program
  1390.  1Eh    WORD    SP of interrupted program
  1391.  20h    WORD    SS of program interrupted by INT 28
  1392.  22h    WORD    SP of program interrupted by INT 28
  1393.  24h    DWORD    INT 24 of interrupted program
  1394.  28h  3 WORDs    DOS 3+ extended error info
  1395.  2Eh    BYTE    old BREAK setting
  1396.  2Fh    BYTE    old VERIFY setting
  1397.  30h    BYTE    were running MS WORD 4.0 before popup
  1398.  31h    BYTE    MS WORD 4.0 special popup flag
  1399.  32h    BYTE    enhanced keyboard call in use
  1400.  33h    BYTE    delay for MS WORD 4.0
  1401. 11 times:
  1402.     DWORD    old interrupt vector
  1403.     BYTE    interrupt number
  1404.     DWORD    new interrupt vector
  1405. ---------------------------------------------
  1406. INT 2F - Multiplex - SCRNSAV2.COM - INSTALLATION CHECK
  1407.     AX = 6400h
  1408. Return: AL = 00h not installed
  1409.          FFh installed
  1410. Note: SCRNSAV2.COM is a screen saver for PS/2's with VGA by Alan Ballard
  1411. ---------------------------------------------
  1412. INT 2F - Multiplex - Novell NetWare - INSTALLATION CHECK
  1413.     AX = 7A00h
  1414. Return: AL = 00h not installed
  1415.        = FFh installed
  1416.         ES:DI -> FAR entry point for routines otherwise accessed
  1417.              through INT 21h
  1418. ---------------------------------------------
  1419. INT 2F - Multiplex - EASY-NET - INSTALLATION CHECK
  1420.     AX = 8000h
  1421. Return: AL = 00h not installed
  1422.          FFh installed
  1423. Note: EASY-NET is a shareware two-machine serial-port network
  1424. ---------------------------------------------
  1425. INT 2F - Multiplex - WHOA!.COM - INSTALLATION CHECK
  1426.     AX = 8900h
  1427. Return: AL = 00h not installed
  1428.        = FFh installed
  1429. Note: WHOA!.COM is a system slow-down utility by Brad D Crandall
  1430. ---------------------------------------------
  1431. INT 2F - Multiplex - WHOA!.COM - UNINSTALL
  1432.     AX = 8901h
  1433. Return: AL = FDh successful
  1434.        = FEh error
  1435. Note: WHOA!.COM is a system slow-down utility by Brad D Crandall
  1436. ---------------------------------------------
  1437. INT 2F - Multiplex - WHOA!.COM - SET DELAY COUNT
  1438.     AX = 8902h
  1439.     BX = delay count (larger values slow system down more)
  1440. Return: AL = FDh successful
  1441.        = FEh error
  1442. Note: WHOA!.COM is a system slow-down utility by Brad D Crandall
  1443. ---------------------------------------------
  1444. INT 2F - Multiplex - VIDCLOCK.COM - INSTALLATION CHECK
  1445.     AX = AA00h
  1446. Return: AL = 00h not installed
  1447.          FFh installed
  1448. Note: VIDCLOCK.COM is a memory-resident clock by Thomas G. Hanlin III
  1449. ---------------------------------------------
  1450. INT 2F - Multiplex - DOS 3.3+ DISPLAY.SYS internal - INSTALLATION CHECK
  1451.     AX = AD00h
  1452. Return: AL = FFh if installed
  1453. ---------------------------------------------
  1454. INT 2F - Multiplex - DOS 3.3+ DISPLAY.SYS internal - ???
  1455.     AX = AD01h
  1456.     ???
  1457. Return: ???
  1458. ---------------------------------------------
  1459. INT 2F - Multiplex - DOS 3.3+ DISPLAY.SYS internal - ???
  1460.     AX = AD02h
  1461.     ???
  1462. Return: ???
  1463. ---------------------------------------------
  1464. INT 2F - Multiplex - DISPLAY.SYS DOS 3.3+ internal - ???
  1465.     AX = AD03h
  1466.     ???
  1467. Return: ???
  1468. ---------------------------------------------
  1469. INT 2F - Multiplex - DOS 4+ DISPLAY.SYS internal - ???
  1470.     AX = AD10h
  1471.     ???
  1472. Return: ???
  1473. ---------------------------------------------
  1474. INT 2F - Multiplex - DOS 3.3+ KEYB.COM internal - INSTALLATION CHECK
  1475.     AX = AD80h
  1476. Return: AL = FFh if installed
  1477.     ES:DI -> internal data
  1478. ---------------------------------------------
  1479. INT 2F - Multiplex - DOS 3.3+ KEYB.COM internal - ???
  1480.     AX = AD81h
  1481.     ???
  1482. Return: ???
  1483. ---------------------------------------------
  1484. INT 2F - Multiplex - DOS 3.3+ KEYB.COM internal - ???
  1485.     AX = AD82h
  1486.     ???
  1487. Return: ???
  1488. ---------------------------------------------
  1489. INT 2F - Multiplex - DOS 3.3+ internal - INSTALLABLE COMMAND - INSTALL CHECK
  1490.     AX = AE00h
  1491.     DX = FFFFh ???
  1492.     DS:BX -> command line:
  1493. Return: AL = FFh if this command is a TSR extension to COMMAND.COM
  1494.     AL = 00h if the command should be executed as usual
  1495. Note:    This apparently provides a mechanism for TSRs to install permanent
  1496.     extensions to the command repertoire of COMMAND.COM.  It appears that
  1497.     COMMAND.COM makes this call before executing the current command line,
  1498.     and does not execute it itself if the return is FFh.
  1499.  
  1500. Format of command line:
  1501. Offset    Size    Description
  1502.  00h    BYTE    ??? (max length of command line, as in INT 21/AH=0Ah ???)
  1503.  01h    BYTE    count of bytes to follow
  1504.       N BYTEs    command line text, terminated by 0Dh
  1505. ---------------------------------------------
  1506. INT 2F - Multiplex - DOS 3.3+ internal - INSTALLABLE COMMAND - EXECUTE
  1507.     AX = AE01h
  1508.     DX = FFFFh ???
  1509.     DS:SI -> a word to be written to
  1510. Return: the word at DS:SI is set to ???
  1511. Note:    this call requests execution of the command which a previous call to
  1512.     AX=AE00h indicated was resident
  1513. ---------------------------------------------
  1514. INT 2F - Multiplex - DOS 3.3+ GRAFTABL.COM - INSTALLATION CHECK
  1515.     AX = B000h
  1516. Return: AL = 00h not installed, OK to install
  1517.        = 01h not installed, not OK to install
  1518.        = FFh installed
  1519. ---------------------------------------------
  1520. INT 2F - Multiplex - DOS 3.3+ GRAFTABL.COM - GET ???
  1521.     AX = B001h
  1522.     DS:DX -> 4-byte buffer
  1523. Return: buffer filled
  1524. Note: in DOS 3.30, the buffer was filled with 0130h, 4C3Eh
  1525. ---------------------------------------------
  1526. INT 2F - Multiplex - APPEND - INSTALLATION CHECK
  1527.     AX = B700h
  1528. Return: AL = 00h not installed
  1529.          FFh if installed
  1530. ---------------------------------------------
  1531. INT 2F - Multiplex - APPEND - ???
  1532.     AX = B701h
  1533.     ???
  1534. ---------------------------------------------
  1535. INT 2F - Multiplex - APPEND - VERSION CHECK
  1536.     AX = B702h
  1537. Return: AX = FFFFh if DOS 4.0 APPEND
  1538.     AL = major version number
  1539.     AH = minor version number, otherwise
  1540. ---------------------------------------------
  1541. INT 2F - Multiplex - DOS 4.0 APPEND - GET APPEND PATH
  1542.     AX = B704h
  1543. Return: ES:DI -> active APPEND path (128 bytes max)
  1544. ---------------------------------------------
  1545. INT 2F - Multiplex - DOS 4.0 APPEND - GET APPEND FUNCTION STATE
  1546.     AX = B706h
  1547. Return: BX = APPEND state
  1548.         bit 0: set if APPEND enabled
  1549.         bits 1-12 reserved
  1550.         bit 13: set if /PATH flag active
  1551.         bit 14: set if /E flag active (environment var APPEND exists)
  1552.         bit 15: set if /X flag active
  1553. ---------------------------------------------
  1554. INT 2F - Multiplex - DOS 4.0 APPEND - SET APPEND FUNCTION STATE
  1555.     AX = B707h
  1556.     BX = APPEND state bits (see AX=B706h)
  1557. ---------------------------------------------
  1558. INT 2F - Multiplex - DOS 4.0 APPEND - SET RETURN FOUND NAME STATE
  1559.     AX = B711h
  1560. Note:    if the next INT 21h call (and ONLY the next) is function 3Dh, 43h, or
  1561.     6Ch, the fully qualified filename is written over top of the filename
  1562.     passed to the INT 21h call.  The application must provide a 
  1563.     sufficiently large buffer.  This state is reset after next INT 21h
  1564.     call processed by APPEND.
  1565. ---------------------------------------------
  1566. INT 2F - Multiplex - Network - INSTALLATION CHECK
  1567.     AX = B800h
  1568. Return: AH = 00h not installed
  1569.         nonzero installed
  1570.           BX = installed component flags (test in this order!)
  1571.            bit 6   server
  1572.            bit 2   messenger
  1573.            bit 7   receiver
  1574.            bit 3   redirector
  1575. ---------------------------------------------
  1576. INT 2F - Multiplex - Network - GET CURRENT POST ADDRESS
  1577.     AX = B803h
  1578. Return: ES:BX = post address
  1579. ---------------------------------------------
  1580. INT 2F - Multiplex - Network - SET NEW POST ADDRESS
  1581.     AX = B804h
  1582.     ES:BX = new post address
  1583. ---------------------------------------------
  1584. INT 2F - Multiplex - Network - ???
  1585.     AX = B808h
  1586.     ???
  1587. Return: ???
  1588. ---------------------------------------------
  1589. INT 2F - Multiplex - Network - VERSION CHECK
  1590.     AX = B809h
  1591.     ???
  1592. Return: ???
  1593. ---------------------------------------------
  1594. INT 2F - Multiplex - PC LAN PROGRAM REDIRIFS.EXE internal - INSTALLATION CHECK
  1595.     AX = BF00h
  1596. Return: AL = FFh if installed
  1597. ---------------------------------------------
  1598. INT 2F - Multiplex - PC LAN PROGRAM REDIRIFS.EXE internal - ???
  1599.     AX = BF01h
  1600.     ???
  1601. Return: ???
  1602. ---------------------------------------------
  1603. INT 2F - Multiplex - PC LAN PROG REDIR.SYS internal - SET REDIRIFS ENTRY POINT
  1604.     AX = BF80h
  1605.     ES:DI -> FAR entry point to IFS handler in REDIRIFS
  1606. Return: AL = FFh if installed
  1607.         ES:DI -> internal workspace
  1608. Note:    all future IFS calls to REDIR.SYS are passed to the ES:DI entry point
  1609. ---------------------------------------------
  1610. INT 2F - Multiplex - Communicating Applications Spec - INSTALLATION CHECK
  1611.     AX = CB00h
  1612. Return: AL = 00h not installed, OK to install
  1613.          01h not installed, not OK to install
  1614.          FFh installed
  1615. Note:    AH = CBh is the default identifier, but may be reconfigured
  1616. ---------------------------------------------
  1617. INT 2F - Multiplex - Communicating Applications Spec - SUBMIT A TASK
  1618.     AX = CB01h
  1619.     DS:DX -> ASCIZ name of task control file
  1620. Return: AX >= 0: event handle
  1621.        < 0: error code
  1622. Notes:    files needed for an event must be kept until task is complete or error
  1623.  
  1624. Error codes (AH = class, AL = subcode, value passed back is 2's complement):
  1625.   Class 00h    --- FAX warnings
  1626.     Subcode 00h    no error
  1627.         02h    bad scanline count
  1628.         03h    page sent with errors, could not retransmit
  1629.         04h    received data lost
  1630.         05h    invalid or missing logo file
  1631.         06h    filename does not match nonstandard format (NSF) header
  1632.         07h    file size does not match NSF header
  1633.   Class 01h    --- DOS warnings (data was sent)
  1634.     Subcode 01h    invalid function
  1635.         05h    access denied
  1636.         06h    invalid handle
  1637.         others    see INT 21/AH=59h
  1638.   Class 02h    --- fatal errors (data not sent)
  1639.     Subcode    00h    multiplex handler failed
  1640.         01h    unknown command
  1641.         02h    bad event handle
  1642.         03h    FIND NEXT attempted before FIND FIRST
  1643.         04h    no more events
  1644.         07h    invalid queue type
  1645.         08h    bad control file
  1646.         09h    communication board busy
  1647.         0Ah    invalid command parameter
  1648.         0Bh    can't uninstall resident code
  1649.         0Ch    file exists
  1650.         80h    unknown task type
  1651.         81h    bad phone number
  1652.         82h    bad .PCX file header
  1653.         83h    unexpected EOF
  1654.         84h    unexpected disconnect
  1655.         85h    too many dialing retries
  1656.         86h    no file specified for send
  1657.         87h    communication board timeout
  1658.         88h    received too many pages (>1023) of data
  1659.         89h    manual connect initiated too long ago
  1660.         8Ah    hardware command set error
  1661.         8Bh    bad NonStandard Format (NSF) header file
  1662.   Class 03h    --- fatal DOS errors
  1663.     Subcode 02h    file not found
  1664.         03h    path not found
  1665.         others    see INT 21/AH=59h
  1666.   Class 04h    --- FAX errors
  1667.     Subcode 03h    other FAX machine incompatible
  1668.         5Eh    other FAX machine jammed
  1669. ---------------------------------------------
  1670. INT 2F - Multiplex - Communicating Applications Spec - ABORT CURRENT EVENT
  1671.     AX = CB02h
  1672. Return: AX >= 0: event handle of aborted event (>= 0)
  1673.        < 0: error code (see AX=CB01h)
  1674. ---------------------------------------------
  1675. INT 2F - Multiplex - Communicating Applications Spec - FIND FIRST QUEUE ENTRY
  1676.     AX = CB05h
  1677.     CX = status of events to find
  1678.         0000h successful completion
  1679.         0001h waiting to be processed
  1680.         0002h number has been dialed
  1681.         0003h connection established, sending
  1682.         0004h connection established, receiving
  1683.         0005h even aborted
  1684.         FFFFh find any event, regardless of status
  1685.         other negative values, match error code
  1686.     DH = direction
  1687.         00h chronological order, earliest to latest
  1688.         01h reverse chronological order, latest to earliest
  1689.     DL = queue to search
  1690.         00h task queue
  1691.         01h receive queue
  1692.         02h log queue
  1693. Return: AX = 0000h successful
  1694.         BX = event handle for found event
  1695.        < 0       error code (see AX=CB01h)
  1696. ---------------------------------------------
  1697. INT 2F - Multiplex - Communicating Applications Spec - FIND NEXT QUEUE ENTRY
  1698.     AX = CB06h
  1699.     DL = queue to search
  1700.         00h task queue
  1701.         01h receive queue
  1702.         02h log queue
  1703. Return: AX = 0000h successful
  1704.         BX = event handle for found event
  1705.        < 0       error code (see AX=CB01h)
  1706. Note: direction of search is same as preceding FIND FIRST call
  1707. ---------------------------------------------
  1708. INT 2F - Multiplex - Communicating Applications Spec - OPEN FILE
  1709.     AX = CB07h
  1710.     BX = event handle
  1711.     CX = receive file number (ignored for task queue and log queue)
  1712.         0000h  open receive control file
  1713.         N       open Nth received data file
  1714.     DL = queue
  1715.         00h task queue
  1716.         01h receive queue control file or received file, as given by CX
  1717.         02h log queue
  1718. Return: AX = 0000h successful
  1719.         BX = DOS file handle for requested file
  1720.        < 0       error code (see AX=CB01h)
  1721. ---------------------------------------------
  1722. INT 2F - Multiplex - Communicating Applications Spec - DELETE FILE
  1723.     AX = CB08h
  1724.     BX = event handle
  1725.     CX = receive file number
  1726.         0000h delete ALL received files and receive control file
  1727.         N      delete Nth received file
  1728.     DL = queue
  1729.         00h delete control file in task queue
  1730.         01h delete file in receive queue, as given by CX
  1731.         02h delete control file in log queue (individual deletions not
  1732.         recommended, to maintain integrity of log)
  1733. Return: AX = 0000h successful
  1734.        < 0       error code (see AX=CB01h)
  1735. ---------------------------------------------
  1736. INT 2F - Multiplex - Communicating Applications Spec - DELETE ALL FILES IN Q
  1737.     AX = CB09h
  1738.     DL = queue
  1739.         00h delete all control files in task queue
  1740.         01h delete all files in receive queue
  1741.         02h delete all control files in log queue
  1742. Return: AX = 0000h successful
  1743.        < 0       error code (see AX=CB01h)
  1744. ---------------------------------------------
  1745. INT 2F - Multiplex - Communicating Applications Spec - GET EVENT DATE
  1746.     AX = CB0Ah
  1747.     BX = event handle
  1748.     DL = queue
  1749.         00h task queue
  1750.         01h receive queue
  1751.         02h log queue
  1752. Return: AX = 0000h successful
  1753.         CX = year
  1754.         DH = month
  1755.         DL = day
  1756.        < 0       error code (see AX=CB01h)
  1757. ---------------------------------------------
  1758. INT 2F - Multiplex - Communicating Applications Spec - SET TASK DATE
  1759.     AX = CB0Bh
  1760.     BX = event handle (task event only)
  1761.     CX = year
  1762.     DH = month
  1763.     DL = day
  1764. Return: AX = 0000h successful
  1765.        < 0       error code (see AX=CB01h)
  1766. Note:    setting a task's date and time to before the current date and time
  1767.     causes it to execute immediately
  1768. ---------------------------------------------
  1769. INT 2F - Multiplex - Communicating Applications Spec - GET EVENT TIME
  1770.     AX = CB0Ch
  1771.     BX = event handle
  1772.     DL = queue
  1773.         00h task queue
  1774.         01h receive queue
  1775.         02h log queue
  1776. Return: AX = 0000h successful
  1777.         CH = hour
  1778.         CL = minute
  1779.         DH = second
  1780.         DL = 00h
  1781.        < 0       error code (see AX=CB01h)
  1782. ---------------------------------------------
  1783. INT 2F - Multiplex - Communicating Applications Spec - SET TASK TIME
  1784.     AX = CB0Dh
  1785.     BX = event handle (task events only)
  1786.     CH = hour
  1787.     CL = minute
  1788.     DH = second
  1789.     DL unused
  1790. Return: AX = 0000h successful
  1791.        < 0       error code (see AX=CB01h)
  1792. Note:    setting a task's date and time to before the current date and time
  1793.     causes it to execute immediately
  1794. ---------------------------------------------
  1795. INT 2F - Multiplex - Communicating Applications Spec - GET EXTERNAL DATA BLOCK
  1796.     AX = CB0Eh
  1797.     DS:DX -> 256-byte buffer
  1798. Return: AX = 0000h successful
  1799.         buffer filled
  1800.        < 0       error code (see AX=CB01h)
  1801.  
  1802. Format of external data block:
  1803. Offset    Size    Description
  1804.  00h    BYTE    CAS major version
  1805.  01h    BYTE    CAS minor version
  1806.  02h 68 BYTEs    ASCIZ path to directory containing CAS software, ends in slash
  1807.  46h 13 BYTEs    ASCIZ name of current phonebook (in CAS directory)
  1808.  53h 13 BYTEs    ASCIZ name of current logo file (in CAS directory)
  1809.  60h 32 BYTEs    ASCIZ default sender name
  1810.  80h 21 BYTEs    ASCIZ CCITT identification of fax device
  1811.  95h 107 BYTEs    reserved
  1812. ---------------------------------------------
  1813. INT 2F - Multiplex - Communicating Applications Spec - GET/SET AUTORECEIVE
  1814.     AX = CB0Fh
  1815.     DL = subfunction
  1816.         00h get current autoreceive state
  1817.         01h set autoreceive state
  1818.         DH = number of rings before answer, 00h = never
  1819. Return: AX = 0000h autoreceive disabled
  1820.        = N       number of rings before answer
  1821.        < 0       error code (see AX=CB01h)
  1822. ---------------------------------------------
  1823. INT 2F - Multiplex - Communicating Applications Spec - GET EVENT STATUS
  1824.     AX = CB10h
  1825.     DS:DX -> 511-byte buffer
  1826. Return: AX = 0000h successful
  1827.         BX = event handle of current event
  1828.         buffer filled
  1829.        < 0       error code (see AX=CB01h)
  1830.  
  1831. Format of status area:
  1832. Offset    Size    Description
  1833.  00h    BYTE    event type
  1834.         00h send
  1835.         01h receive
  1836.         02h polled send
  1837.         03h polled receive
  1838.         04h to 7Fh reserved
  1839.         FFh serious hardware error
  1840.  01h    BYTE    transfer type
  1841.         00h 200x200 dpi, FAX mode
  1842.         01h 100x200 dpi, FAX mode
  1843.         02h file transfer mode
  1844.         03h to 7Fh reserved
  1845.  02h    WORD    event status 
  1846.         0000h completed successfully
  1847.         0001h waiting
  1848.         0002h number dialed
  1849.         0003h connected, sending
  1850.         0004h connected, receiving
  1851.         0005h aborted
  1852.         0006h to 007Fh reserved
  1853.         0080h to 7FFFh application-specific events
  1854.         8000h to FFFFh error codes
  1855.  04h    WORD    event time (packed DOS time format, see INT 21/AX=5700h)
  1856.  06h    WORD    event date (packed DOS date format, see INT 21/AX=5700h)
  1857.  08h    WORD    number of files to transfer, max 7FFFh
  1858.  0Ah    WORD    offset of file transfer record
  1859.  0Ch 47 BYTEs    ASCIZ phone number to call
  1860.  3Bh 64 BYTEs    ASCIZ application-specific tag string
  1861.  7Bh    BYTE    reserved (00h)
  1862.  7Ch    BYTE    connect time, seconds
  1863.  7Dh    BYTE    connect time, minutes
  1864.  7Eh    BYTE    connect time, hours
  1865.  7Fh    DWORD    total number of pages in all files
  1866.  83h    DWORD    pages already transmitted 
  1867.  87h    WORD    number of files already transmitted
  1868.  89h    BYTE    cover page flag
  1869.         00h don't transmit cover page
  1870.         01h transmit cover page
  1871.         02h to 7Fh reserved
  1872.  8Ah    WORD    total number of transmission errors
  1873.  8Ch 78 BYTEs    reserved (zeros)
  1874.  DAh 21 BYTEs    ASCIZ remote FAX's CCITT identification
  1875.  EFH 32 BYTEs    ASCIZ destination name
  1876. 10Fh 32 BYTEs    ASCIZ sender name
  1877. 12Fh 80 BYTEs    filename of PCX logo file (max 1780x800 pixels)
  1878. 17Fh 128 BYTEs    file transfer record for current event (see below)
  1879.  
  1880. Format of file transfer record:
  1881. Offset    Size    Description
  1882.  00h    BYTE    file type (ignored unless FAX)
  1883.         00h ASCII
  1884.         01h PCX
  1885.         02h DCX
  1886.         03h to 7Fh reserved
  1887.  01h    BYTE    text size for ASCII FAX file
  1888.         00h = 80 columns by 66 lines (11 inches)
  1889.         01h = 132 columns by 88 lines (11 inches)
  1890.         02h to 7Fh reserved
  1891.  02h    BYTE    status of file
  1892.         00h untouched
  1893.         01h opened
  1894.         02h moved
  1895.         03h deleted
  1896.         04h not yet received
  1897.         05h to 7Fh reserved
  1898.  03h    DWORD    bytes already transmitted
  1899.  07h    DWORD    file size in bytes
  1900.  0Bh    WORD    pages alread transmitted
  1901.  0Dh    WORD    number of pages in file
  1902.  0Fh 80 BYTEs    ASCIZ filename
  1903.  5Fh    BYTE    1/8 inch page length
  1904.         if page length below set to 01h through 7Fh, this value 
  1905.         specifies additional 1/8 inch increments to page length
  1906.  60h    BYTE    page length
  1907.         00h = 11 inches
  1908.         01h to 7Fh = page length is this number of inches plus value of
  1909.             1/8 inch field above
  1910.         80h to FEh reserved
  1911.         FFh = ASCII pages ending with formfeed
  1912.  61h 31 BYTEs    reserved (zeros)
  1913. ---------------------------------------------
  1914. INT 2F - Multiplex - Communicating Applications Spec - GET QUEUE STATUS
  1915.     AX = CB11h
  1916.     DL = queue to get status of
  1917.         00h task queue
  1918.         01h receive queue
  1919.         02h log queue
  1920. Return: AX >= 0  total number of changes made to queue, modulo 32768
  1921.         BX = number of control files currently in queue
  1922.         CX = number of received files (zero for task and log queues)
  1923.        < 0     error code (see AX=CB01h)
  1924. ---------------------------------------------
  1925. INT 2F - Multiplex - Communicating Applications Spec - GET HARDWARE STATUS
  1926.     AX = CB12h
  1927.     DS:DX -> 128-byte status buffer
  1928. Return: AX = 0000h successful
  1929.         buffer filled with hardware-dependent status information
  1930.        < 0       error code (see AX=CB01h)
  1931.  
  1932. Format of status buffer for Intel Connection CoProcessor:
  1933. Offset    Size    Description
  1934.  00h    BYTE    bit flags
  1935.         bit 7: hardware busy sending or receiving
  1936.         bit 6: last page of data
  1937.         bit 5: no data on current page
  1938.         bit 4: retransmit request for current page being transmitted
  1939.         bit 3: NSF mode active
  1940.         bits 2-0: reserved
  1941.  01h    BYTE    number of kilobytes of free buffer space
  1942.  02h    BYTE    page buffer status
  1943.         bit 7: Connection CoProcessor has documents to send
  1944.         bits 6-0: number of pages in buffer
  1945.  03h    BYTE    number of retries left for dialing number
  1946.  04h    BYTE    page number to retransmit
  1947.  05h    BYTE    communications status
  1948.         bit 7: originating call
  1949.         bit 6: FAX message to be sent
  1950.         bit 5: on line
  1951.         bit 4: ring detected and receive enabled
  1952.         bit 3: buffer dumped on receive
  1953.         bits 2-0: hardware sequence state
  1954.             000 idle
  1955.             001 dial
  1956.             010 answer
  1957.             011 transmit
  1958.             100 receive
  1959.             101 pre-message
  1960.             110 post-message
  1961.             111 disconnect
  1962.  06h    BYTE    baud rate
  1963.         bit 7: reserved
  1964.         bits 6-4: baud rate
  1965.             000 = 300 baud (SDLC mode)
  1966.             100 = 2400 baud
  1967.             101 = 4800 baud
  1968.             110 = 7200 baud
  1969.             111 = 9600 baud
  1970.         bits 3-0: reserved, should be 0110
  1971.  07h  3 BYTEs    reserved
  1972.  0Ah    BYTE    hardware status
  1973.         bit 7: modem option installed
  1974.         bit 6: Connection CoProcessor has control of DAA (not latched)
  1975.         bit 5: on line (not latched)
  1976.         bit 4: ring detected (not latched)
  1977.         bit 3: data in command buffer (not latched)
  1978.         bit 2: set if using DMA channel 1, clear if using DMA channel 3
  1979.         bit 1: line length compensation bit 1 set (not latched)
  1980.         bit 0: line length compensation bit 0 set (not latched)
  1981.  0Bh    BYTE    switch states
  1982.         bit 7: reserved
  1983.         bit 6: unused
  1984.         bit 5: spare switch open
  1985.         bit 4: FAX ADR1 switch open
  1986.         bit 3: FAX ADR0 switch open
  1987.         bit 2: alternate interrupt switch open
  1988.         bit 1: COM SEL 1 switch open
  1989.         bit 0: COM SEL 0 switch open
  1990.  0Ch    BYTE    bit flags
  1991.         bit 7: reserved
  1992.         bit 6: auxiliary relay forced ON
  1993.         bit 5: modem select relay forced ON
  1994.         bit 4: offhook relay forced ON
  1995.         bit 3: 9600 bps enabled
  1996.         bit 2: 7200 bps enabled
  1997.         bit 1: 4800 bps enabled
  1998.         bit 0: 2400 bps enabled
  1999.  0Dh    BYTE    reserved
  2000.  0Eh    WORD    error count
  2001.  10h    DWORD    size of nonstandard format (NSF) file in bytes
  2002.  14h 10 BYTEs    reserved
  2003.  1Eh 21 BYTEs    ASCIZ CCITT identification
  2004.  33h 77 BYTEs    reserved
  2005. ---------------------------------------------
  2006. INT 2F - Multiplex - Communicating Applications Spec - GET DIAGNOSTICS RESULTS
  2007.     AX = CB13h
  2008.     DL = 00h
  2009. Return: AX = 0040h in progress
  2010.        > 0       passed
  2011.        < 0       failure code
  2012. Note: diagnostics return values are hardware dependent
  2013.  
  2014. Intel Connection CoProcessor failure codes:
  2015.     bit 3: 9600 bps FAX modem module failed
  2016.     bit 2: SDLC chip failed
  2017.     bit 1: RAM failed
  2018.     bit 0: ROM checksum failed
  2019. ---------------------------------------------
  2020. INT 2F - Multiplex - Communicating Applications Spec - START DIAGNOSTICS
  2021.     AX = CB13h
  2022.     DL = 01h
  2023. Return: AX = 0000h successfully started
  2024.        < 0       error code (see AX=CB01h)
  2025. ---------------------------------------------
  2026. INT 2F - Multiplex - Communicating Applications Spec - MOVE RECEIVED FILE
  2027.     AX = CB14h
  2028.     BX = event handle
  2029.     CX = receive file number
  2030.          0001h first received file
  2031.          N       Nth received file
  2032.     DS:DX -> ASCIZ string specifying new name for file
  2033. Return: AX = 0000h successful
  2034.        < 0       error code (see AX=CB01h)
  2035. ---------------------------------------------
  2036. INT 2F - Multiplex - Communicating Applications Spec - SUBMIT FILE TO SEND
  2037.     AX = CB15h
  2038.     DS:DX -> variable-length data area
  2039. Return: AX >= 0    event handle
  2040.        < 0    error code (see AX=CB01h)
  2041.  
  2042. Format of data area:
  2043. Offset    Size    Description
  2044.  00h    BYTE    transfer type
  2045.         00h = 200x200 dpi, fax mode
  2046.         01h = 100x200 dpi, fax mode
  2047.         02h = file transfer mode
  2048.         03h to 7Fh reserved
  2049.  01h    BYTE    text size
  2050.         00h = 80 columns
  2051.         01h = 132 columns
  2052.         02h to 7Fh reserved
  2053.  02h    WORD    time to send (DOS packed time format, see INT 21/AX=5700h)
  2054.  04h    WORD    date to send (DOS packed date format, see INT 21/AX=5700h)
  2055.  06h 32 BYTEs    ASCIZ destination name
  2056.  26h 80 BYTEs    ASCIZ name of file to send
  2057.  76h 47 BYTEs    ASCIZ phone number to dial
  2058.  A5h 64 BYTEs    ASCIZ application-specific tag string
  2059.  E5h    BYTE    reserved (00h)
  2060.  E6h    BYTE    cover page
  2061.         00h don't send cover page
  2062.         01h send cover page
  2063.         02h to 7Fh reserved
  2064.  E7h 23 BYTEs    reserved (zeros)
  2065.  FEh variable    ASCIZ string containing text of cover page (if cover page flag
  2066.         set to 01h)
  2067. ---------------------------------------------
  2068. INT 2F - Multiplex - Intel Image Processing Interface - INSTALLATION CHECK
  2069.     AX = CD00h
  2070. Return: AL = 00h not installed, OK to install
  2071.          01h not installed, not OK to install
  2072.          FFh installed
  2073. ---------------------------------------------
  2074. INT 2F - Multiplex - SWELL.EXE - INSTALLATION CHECK
  2075.     AX = CD00h
  2076. Return: AX = 00FFh installed
  2077.         BH = major version
  2078.         BL = minor version
  2079. Note:    SWELL.EXE is a TSR which swaps programs to disk when they EXEC a child
  2080.     process with INT 21/AH=4Bh
  2081. ---------------------------------------------
  2082. INT 2F - Multiplex - Intel Image Processing Interface - SET DEVICE NAME
  2083.     AX = CD01h
  2084.     CX:BX -> ASCIZ character device name ("LPTn", "COMn", "PRN")
  2085. Return: AL = 00h successful
  2086.         CX:BX -> internal character device name
  2087.        = 80h error
  2088. ---------------------------------------------
  2089. INT 2F - Multiplex - SWELL.EXE - SUSPEND ONCE
  2090.     AX = CD01h
  2091. Return: AX = 0000h
  2092. ---------------------------------------------
  2093. INT 2F - Multiplex - Intel Image Processing Interface - GET VERSION NUMBER
  2094.     AX = CD02h
  2095. Return: AL = 00h/01h successful
  2096.         BH = major version number (BCD)
  2097.         BL = minor version number (BCD)
  2098.        = 80h error
  2099. Note: if return AL = 01h, the IPI supports network redirection
  2100. ---------------------------------------------
  2101. INT 2F - Multiplex - SWELL.EXE - SUSPEND
  2102.     AX = CD02h
  2103. Return: AX = 0000h
  2104. ---------------------------------------------
  2105. INT 2F - Multiplex - Intel Image Processing Interface - SELECT SCAN LINE
  2106.     AX = CD03h
  2107.     BX = scan line
  2108.     CX = requested density in dots per inch (300, 600, or 1200)
  2109. Return: AL = 00h succesful
  2110.         CX = density at which scan line was mapped
  2111.         ES:DI -> start of scan line
  2112.     AL = 80h unsuccessful
  2113.        = 81h scan line out of range
  2114.        = 82h unsupported scan line density
  2115.        = 83h out of memory
  2116. ---------------------------------------------
  2117. INT 2F - Multiplex - SWELL.EXE - ACTIVATE
  2118.     AX = CD03h
  2119. Return: AX = 0000h
  2120. ---------------------------------------------
  2121. INT 2F - Multiplex - Intel Image Processing Interface - MOVE BITMAP TO SCANLINE
  2122.     AX = CD04h
  2123.     CX:BX -> structure (see below)
  2124. Return: AL = 00h successful
  2125.        = 80h unsuccessful
  2126.        = 81h scan line out of range
  2127.        = 82h unsupported scan line density
  2128.        = 83h out of memory
  2129.        = 84h unrecognized source
  2130.        = 85h initialization error
  2131.  
  2132. Format of structure:
  2133. Offset    Size    Description
  2134.  00h    WORD    image source (0 = conventional memory, 1 = expanded memory)
  2135.  02h    DWORD    pointer to image data
  2136.  06h    WORD    scan line on which to place
  2137.  08h    WORD    bit offset from start of scan line at which to place
  2138.  0Ah    WORD    density of bitmap data (300, 600, or 1200 dpi)
  2139.  0Ch    WORD    width in bits of data
  2140.  0Eh    WORD    source logical page number
  2141.  10h    WORD    source handle (only if source in expanded memory)
  2142.  12h    WORD    source offset (only if source in expanded memory)
  2143. ---------------------------------------------
  2144. INT 2F - Multiplex - SWELL.EXE - TURN OFF VERBOSE MODE
  2145.     AX = CD04h
  2146. Return: AX = 0000h
  2147. ---------------------------------------------
  2148. INT 2F - Multiplex - Intel Image Processing Interface - PRINT PAGE
  2149.     AX = CD05h
  2150. Return: AL = 00h successful
  2151.        = 80h unsuccessful
  2152. Note:    page image is retained, so multiple calls will print multiple copies of
  2153.     the page
  2154. ---------------------------------------------
  2155. INT 2F - Multiplex - SWELL.EXE - TURN ON VERBOSE MODE
  2156.     AX = CD05h
  2157. Return: AX = 0000h
  2158. ---------------------------------------------
  2159. INT 2F - Multiplex - Intel Image Processing Interface - CLEAR PAGE
  2160.     AX = CD06h
  2161. Return: AL = 00h successful
  2162.        = 80h unsuccessful
  2163. Note:    palette is reset to default
  2164. ---------------------------------------------
  2165. INT 2F - Multiplex - SWELL.EXE - UNINSTALL
  2166.     AX = CD06h
  2167. Return: AX = 0000h uninstalled
  2168.        = 8002h programs still swapped, not uninstalled
  2169. ---------------------------------------------
  2170. INT 2F - Multiplex - Intel Image Processing Interface - reserved
  2171.     AX = CD07h
  2172. ---------------------------------------------
  2173. INT 2F - Multiplex - SWELL.EXE - GET INFO
  2174.     AX = CD07h
  2175.     ES:BX -> 32-byte buffer for info
  2176. Return: AX = 0000h successful
  2177.         ES:BX buffer filled
  2178.        = 8001h buffer wrong size
  2179.  
  2180. Format of info buffer:
  2181. Offset    Size    Description
  2182.  00h    WORD    20h  (total size of buffer)
  2183.  02h    BYTE    suspend-once mode active if nonzero
  2184.  03h    BYTE    00h active, 01h suspended
  2185.  04h    BYTE    00h quiet, 01h verbose
  2186.  05h    BYTE    "Borland support" (allowing INT 21/AX=4B01h) on if nonzero
  2187.  06h 26 BYTEs    unused???
  2188. ---------------------------------------------
  2189. INT 2F - Multiplex - Intel Image Processing Interface - SCREEN IMAGE
  2190.     AX = CD08h
  2191.     CX:BX -> structure (see below)
  2192. Return: AL = 00h successful
  2193.        = 80h unsuccessful
  2194.        = 81h scan line out of range
  2195.        = 82h unsupported scan line density
  2196.        = 83h out of memory
  2197.        = 84h unrecognized source
  2198.        = 85h initialization error
  2199.  
  2200. Format of structure:
  2201. Offset    Size    Description
  2202.  00h    WORD    image source (0 = conventional memory, 1 = expanded memory)
  2203.  02h    DWORD    pointer to image data
  2204.  06h    WORD    horizontal position on paper of left edge (in 1200 dpi units)
  2205.  08h    WORD    vertical position on paper of top edge (in 1200 dpi units)
  2206.  0Ah    WORD    left cropping (currently must be zero)
  2207.  0Ch    WORD    top cropping (currently must be zero)
  2208.  0Eh    WORD    width (currently must be 8000h)
  2209.  10h    WORD    height (currently must be 8000h)
  2210.  12h    WORD    horizontal size of image in 1200 dpi units
  2211.  14h    WORD    vertical size of image in 1200 dpi units
  2212.  16h    WORD    aspect ratio (currently reserved)
  2213.  18h    WORD    initialization flag (if 01h, initialization is performed)
  2214.  1Ah    WORD    pixels per line of source data
  2215.  1Ch    WORD    number of scan lines in source data
  2216.  1Eh    WORD    number of scan lines in packet
  2217.  20h    WORD    bits per pixel (1,2,4,6, or 8)
  2218.  22h    WORD    pixels per byte (1,2,4, or 8)
  2219.  24h    WORD    compression type (currently only 00h [uncompressed] supported)
  2220.  26h    WORD    source page number (if in expanded memory)
  2221.  28h    WORD    source handle (if in expanded memory)
  2222.  2Ah    WORD    source offset (if in expanded memory)
  2223. ---------------------------------------------
  2224. INT 2F - Multiplex - SWELL.EXE - UNUSED
  2225.     AX = CD08h
  2226. Return: AX = FFFFh (error)
  2227. ---------------------------------------------
  2228. INT 2F - Multiplex - Intel Image Processing Interface - LOAD SCREEN
  2229.     AX = CD09h
  2230.     CX:BX -> structure (see below)
  2231. Return: AL = 00h successful
  2232.        = 80h unsuccessful
  2233.  
  2234. Format of structure:
  2235. Offset    Size    Description
  2236.  00h    BYTE    style
  2237.         44h ('D') diamond style
  2238.         4Ch ('L') line style
  2239.  01h    BYTE    reserved (00h)
  2240.  02h    WORD    frequency in lines per inch [sic]
  2241.         currently, coerced to nearest of 50, 60, 68, 70, 75, 85, or 100
  2242.  04h    WORD    screen angle in degrees (-360 to 360)
  2243.         currently coerced to nearest of -45, 0, 45, or 90
  2244. ---------------------------------------------
  2245. INT 2F - Multiplex - SWELL.EXE - TURN OFF "BORLAND SUPPORT"
  2246.     AX = CD09h
  2247. Return: AX = 0000h
  2248. ---------------------------------------------
  2249. INT 2F - Multiplex - Intel Image Processing Interface - LOAD PALETTE
  2250.     AX = CD0Ah
  2251.     CX:BX -> palette structure (see below)
  2252. Return: AL = 00h successful
  2253.        = 80h unsuccessful
  2254.  
  2255. Format of palette structure:
  2256. Offset    Size    Description
  2257.  00h    BYTE    bits per pixel for which palette is to be used (1,2,4,6, or 8)
  2258.  01h    2**N    palette translation values, one per possible pixel value
  2259. ---------------------------------------------
  2260. INT 2F - Multiplex - SWELL.EXE - TURBO ON "BORLAND SUPPORT"
  2261.     AX = CD0Ah
  2262. Return: AX = 0000h
  2263. ---------------------------------------------
  2264. INT 2F - Multiplex - 4DOS.COM v2.1+
  2265.     AX = D44Dh
  2266.     BH = function
  2267.         00h installation check
  2268.         Return: AX = 44DDh
  2269.             BL = minor version number
  2270.             BH = major version number
  2271.             CX = PSP segment address for current invocation
  2272.             DL = 4DOS shell number (0 for the first (root) shell,
  2273.                          updated each time a new copy is loaded)
  2274.         01h (internal) terminate current copy of 4DOS
  2275.         02h ???
  2276.         DX = ???
  2277.         03h EXEC program
  2278.         CX:DX -> EXEC record
  2279.         FEh deallocate shell number (passed through to root shell)
  2280.         ???
  2281.         FFh allocate shell number (passed through to root shell)
  2282.  
  2283. Format of EXEC record:
  2284. Offset    Size    Description
  2285.  00h    WORD    offset of ASCIZ program name in same segment as EXEC record
  2286.  02h    WORD    offset of DOS commandline in same segment as EXEC record
  2287.  04h    WORD    segment of environment to use for child process
  2288. ---------------------------------------------
  2289. INT 2F - Multiplex - ANARKEY.COM - INSTALLATION CHECK
  2290.     AX = E300h
  2291. Return: AL = 00h not installed
  2292.          FFh installed
  2293. Notes: ANARKEY.COM is a commandline recall program by Steven Calwas
  2294.        E3h is the default function number, but can be set to any value from
  2295.        C0h to FFh.
  2296. ---------------------------------------------
  2297. INT 2F - Multiplex - ANARKEY.COM v2.0 - GET ???
  2298.     AX = E301h
  2299. Return: DX:BX -> ???
  2300. Note:    ANARKEY.COM is a commandline recall program by Steven Calwas
  2301.  
  2302. Format of returned data structure:
  2303. Offset    Size    Description
  2304.  -7   7 BYTEs    signature ('ANARKEY')
  2305.  00h    WORD    ??? (I see 0001h in v2.0)
  2306.  02h    WORD    ??? (I see 0001h in v2.0)
  2307.  04h    WORD    ??? (I see 0 in v2.0)
  2308.  06h    WORD    PSP segment of next program loaded
  2309. ---------------------------------------------
  2310. INT 2F - Multiplex - AUTOPARK.COM - INSTALLATION CHECK
  2311.     AX = F700h
  2312. Return: AL = 00h not installed
  2313.          FFh installed
  2314. Note: AUTOPARK.COM is a resident hard disk parker by Alan D. Jones
  2315. ---------------------------------------------
  2316. INT 2F - Multiplex - AUTOPARK.COM - SET PARKING DELAY
  2317.     AX = F701h
  2318.     BX:CX = 32 bit count of 55ms timer ticks
  2319. ---------------------------------------------
  2320. INT 30 - (NOT A VECTOR!) FAR JMP instruction for CP/M-style calls
  2321.      the CALL 5 entry point does a FAR jump to here
  2322. ---------------------------------------------
  2323. INT 31 - overwritten by CP/M jump instruction in INT 30h
  2324. ---------------------------------------------
  2325. INT 32 - reserved
  2326. ---------------------------------------------
  2327. INT 33 - MS MOUSE - RESET DRIVER AND READ STATUS
  2328.     AX = 0000h
  2329. Return: AX = status
  2330.         0000h  hardware/driver not installed
  2331.         FFFFh hardware/driver installed
  2332.     BX = number of buttons
  2333.         FFFFh two buttons
  2334.         0000h  other than two
  2335.         0003h  Mouse Systems mouse
  2336. ---------------------------------------------
  2337. INT 33 - MS MOUSE - SHOW MOUSE CURSOR
  2338.     AX = 0001h
  2339. ---------------------------------------------
  2340. INT 33 - MS MOUSE - HIDE MOUSE CURSOR
  2341.     AX = 0002h
  2342. Note: multiple calls to hide the cursor will require multiple calls to
  2343.       function 01h to unhide it.
  2344. ---------------------------------------------
  2345. INT 33 - MS MOUSE - RETURN POSITION AND BUTTON STATUS
  2346.     AX = 0003h
  2347. Return: BX = button status
  2348.        bit 0  left button pressed if 1
  2349.        bit 1  right button pressed if 1
  2350.        bit 2  middle button pressed if 1 (Mouse Systems mouse)
  2351.     CX = column
  2352.     DX = row
  2353. ---------------------------------------------
  2354. INT 33 - MS MOUSE - POSITION MOUSE CURSOR
  2355.     AX = 0004h
  2356.     CX = column
  2357.     DX = row
  2358. Note:    the row and column are truncated to the next lower multiple of the cell
  2359.     size; however, some versions of the Microsoft documentation state that
  2360.     the coordinates are rounded
  2361. ---------------------------------------------
  2362. INT 33 - MS MOUSE - RETURN BUTTON PRESS DATA
  2363.     AX = 0005h
  2364.     BX = button
  2365.         0000h left
  2366.         0001h right
  2367.         0002h middle (Mouse Systems mouse)
  2368. Return: AX = button states
  2369.         bit 0 left button pressed if 1
  2370.         bit 1 right button pressed if 1
  2371.         bit 2 middle button pressed if 1 (Mouse Systems mouse)
  2372.     BX = number of times specified button has been pressed since last call
  2373.     CX = column at time specified button was last pressed
  2374.     DX = row at time specified button was last pressed
  2375. ---------------------------------------------
  2376. INT 33 - MS MOUSE - RETURN BUTTON RELEASE DATA
  2377.     AX = 0006h
  2378.     BX = button
  2379.         0000h left
  2380.         0001h right
  2381.         0002h middle (Mouse Systems mouse)
  2382. Return: AX = button states
  2383.         bit 0 left button pressed if 1
  2384.         bit 1 right button pressed if 1
  2385.         bit 2 middle button pressed if 1 (Mouse Systems mouse)
  2386.     BX = number of times specified button has been released since last call
  2387.     CX = column at time specified button was last released
  2388.     DX = row at time specified button was last released
  2389. ---------------------------------------------
  2390. INT 33 - MS MOUSE - DEFINE HORIZONTAL CURSOR RANGE
  2391.     AX = 0007h
  2392.     CX = minimum column
  2393.     DX = maximum column
  2394. ---------------------------------------------
  2395. INT 33 - MS MOUSE - DEFINE VERTICAL CURSOR RANGE
  2396.     AX = 0008h
  2397.     CX = minimum row
  2398.     DX = maximum row
  2399. ---------------------------------------------
  2400. INT 33 - MS MOUSE - DEFINE GRAPHICS CURSOR
  2401.     AX = 0009h
  2402.     BX = column of cursor hot spot in bitmap (-16 to 16)
  2403.     CX = row of cursor hot spot (-16 to 16)
  2404.     ES:DX -> bitmap
  2405.         16 words screen mask
  2406.         16 words cursor mask
  2407.             each word defines the sixteen pixels of a row, low bit
  2408.             rightmost
  2409. ---------------------------------------------
  2410. INT 33 - MS MOUSE - DEFINE TEXT CURSOR
  2411.     AX = 000Ah
  2412.     BX = hardware/software text cursor
  2413.         0000h software
  2414.         CX = screen mask
  2415.         DX = cursor mask
  2416.         0001h hardware
  2417.         CX = start scan line
  2418.         DX = end scan line
  2419. Note: when the software cursor is selected, the char/attribute data at the
  2420.       current screen position is ANDed with the screen mask and then XORed
  2421.       with the cursor mask
  2422. ---------------------------------------------
  2423. INT 33 - MS MOUSE - READ MOTION COUNTERS
  2424.     AX = 000Bh
  2425. Return: CX = number of mickeys mouse moved horizontally since last call
  2426.     DX = number of mickeys mouse moved vertically
  2427. Notes: a mickey is the smallest increment the mouse can sense
  2428.        positive values indicate down/right
  2429. ---------------------------------------------
  2430. INT 33 - MS MOUSE - DEFINE INTERRUPT SUBROUTINE PARAMETERS
  2431.     AX = 000Ch
  2432.     CX = call mask
  2433.          bit 0 call if mouse moves
  2434.          bit 1 call if left button pressed
  2435.          bit 2 call if left button released
  2436.          bit 3 call if right button pressed
  2437.          bit 4 call if right button released
  2438.          bit 5 call if middle button pressed (Mouse Systems mouse)
  2439.          bit 6 call if middle button released (Mouse Systems mouse)
  2440.     ES:DX -> FAR routine
  2441. Note: when the subroutine is called, it is passed the following values:
  2442.     AX = condition mask (same bit assignments as call mask)
  2443.     BX = button state
  2444.     CX = cursor column
  2445.     DX = cursor row
  2446.     SI = horizontal mickey count
  2447.     DI = vertical mickey count
  2448. Note:    some versions of the Microsoft documentation incorrectly state that CX
  2449.     bit 0 means call if mouse cursor moves, and swap the meanings of SI and
  2450.     DI
  2451. ---------------------------------------------
  2452. INT 33 - MS MOUSE - LIGHT PEN EMULATION ON
  2453.     AX = 000Dh
  2454. ---------------------------------------------
  2455. INT 33 - MS MOUSE - LIGHT PEN EMULATION OFF
  2456.     AX = 000Eh
  2457. ---------------------------------------------
  2458. INT 33 - MS MOUSE - DEFINE MICKEY/PIXEL RATIO
  2459.     AX = 000Fh
  2460.     CX = number of mickeys per 8 pixels horizontally (default 8)
  2461.     DX = number of mickeys per 8 pixels vertically (default 16)
  2462. ---------------------------------------------
  2463. INT 33 - MS MOUSE - DEFINE SCREEN REGION FOR UPDATING
  2464.     AX = 0010h
  2465.     CX,DX = X,Y coordinates of upper left corner
  2466.     SI,DI = X,Y coordinates of lower right corner
  2467. Note: mouse cursor is hidden during updating, and needs to be explicitly turned
  2468.     on again
  2469. ---------------------------------------------
  2470. INT 33 - PCMOUSE - SET LARGE GRAPHICS CURSOR BLOCK
  2471.     AX = 0012h
  2472.     BH = cursor width in words
  2473.     CH = rows in cursor
  2474.     BL = horizontal hot spot (-16 to 16)
  2475.     CL = vertical hot spot (-16 to 16)
  2476.     ES:DX -> bit map of screen and cursor maps
  2477. Return: AX = -1 if successful
  2478. ---------------------------------------------
  2479. INT 33 - MS MOUSE - DEFINE DOUBLE-SPEED THRESHOLD
  2480.     AX = 0013h
  2481.     DX = threshold speed in mickeys/second, 0000h = default of 64/second
  2482. Note:    if speed exceeds threshold, the cursor's on-screen motion is doubled
  2483. ---------------------------------------------
  2484. INT 33 - MS MOUSE - EXCHANGE INTERRUPT SUBROUTINES
  2485.     AX = 0014h
  2486.     CX = call mask (see AX=000Ch)
  2487.     ES:DX -> FAR routine 
  2488. Return: CX = call mask of previous interrupt routine
  2489.     ES:DX = FAR address of previous interrupt routine
  2490. ---------------------------------------------
  2491. INT 33 - MS MOUSE - RETURN DRIVER STORAGE REQUIREMENTS
  2492.     AX = 0015h
  2493. Return: BX = size of buffer needed to store driver state
  2494. ---------------------------------------------
  2495. INT 33 - MS MOUSE - SAVE DRIVER STATE
  2496.     AX = 0016h
  2497.     ES:DX -> buffer for driver state
  2498. ---------------------------------------------
  2499. INT 33 - MS MOUSE - RESTORE DRIVER STATE
  2500.     AX = 0017h
  2501.     ES:DX -> buffer containing saved state
  2502. ---------------------------------------------
  2503. INT 33 - MS MOUSE - SET ALTERNATE MOUSE USER HANDLER
  2504.     AX = 0018h
  2505.     CX = call mask
  2506.          bit 0 call if alt key pressed during event
  2507.          bit 1 call if ctrl key pressed during event
  2508.          bit 2 call if shift button pressed during event
  2509.          bit 3 call if right button released
  2510.          bit 4 call if right button pressed
  2511.          bit 5 call if left button released
  2512.          bit 6 call if left button pressed
  2513.          bit 7 call if mouse moves
  2514.     BX(???):DX = address of FAR routine
  2515. Note: when the subroutine is called, it is passed the following values:
  2516.     AX = condition mask (same bit assignments as call mask)
  2517.     BX = button state
  2518.     CX = cursor column
  2519.     DX = cursor row
  2520.     DI = horizontal mickey count
  2521.     SI = vertical mickey count
  2522. Note: up to three handlers can be defined by separate calls to this function
  2523. ---------------------------------------------
  2524. INT 33 - MS MOUSE - RETURN USER ALTERNATE INTERRUPT VECTOR
  2525.     AX = 0019h
  2526.     CX = call mask
  2527. Return: BX:DX = user interrupt vector
  2528.     CX = call mask (0 if not found)
  2529. Note:    attempts to find a user event handler (defined by function 18h)
  2530.     whose call mask matches CX
  2531. ---------------------------------------------
  2532. INT 33 - MS MOUSE - SET MOUSE SENSITIVITY
  2533.     AX = 001Ah
  2534.     BX = horizontal speed \
  2535.     CX = vertical speed   / (see AX=000Fh)
  2536.     DX = double speed threshold (see AX=0013h)
  2537. ---------------------------------------------
  2538. INT 33 - MS MOUSE - RETURN MOUSE SENSITIVITY
  2539.     AX = 001Bh
  2540. Return: BX = horizontal speed
  2541.     CX = vertical speed
  2542.     DX = double speed threshold
  2543. ---------------------------------------------
  2544. INT 33 - MS MOUSE - SET INTERRUPT RATE
  2545.     AX = 001Ch
  2546.     ???
  2547. ---------------------------------------------
  2548. INT 33 - MS MOUSE - DEFINE DISPLAY PAGE NUMBER
  2549.     AX = 001Dh
  2550.     BX = display page number
  2551. Note: the cursor will be displayed on the specified page
  2552. ---------------------------------------------
  2553. INT 33 - MS MOUSE - RETURN DISPLAY PAGE NUMBER
  2554.     AX = 001Eh
  2555. Return: BX = display page number
  2556. ---------------------------------------------
  2557. INT 33 - MS MOUSE - DISABLE MOUSE DRIVER
  2558.     AX = 001Fh
  2559. Return: AX = 001Fh successful
  2560.          FFFFh unsuccessful
  2561.     ES:BX = vector for Int 33h before mouse driver was first installed
  2562. Note:    restores vectors for Int 10h and Int 71h (8086) or Int 74h (286/386)
  2563.     if you restore Int 33h to ES:BX, driver will be completely disabled
  2564. ---------------------------------------------
  2565. INT 33 - MS MOUSE - ENABLE MOUSE DRIVER
  2566.     AX = 0020h
  2567. Note:    restores vectors for Int 10h and Int 71h (8086) or Int 74h (286/386)
  2568.     which were removed by function 1Fh
  2569. ---------------------------------------------
  2570. INT 33 - MS MOUSE - SOFTWARE RESET
  2571.     AX = 0021h
  2572. Return: AX = FFFFh if mouse driver installed
  2573.          0021h if mouse driver not installed
  2574.     BX = 2 if mouse driver is installed
  2575. Note:    identical to funtion 00h, but does not reset the mouse
  2576. ---------------------------------------------
  2577. INT 33 - MS MOUSE - SET LANGUAGE FOR MESSAGES
  2578.     AX = 0022h
  2579.     ???
  2580. ---------------------------------------------
  2581. INT 33 - MS MOUSE - GET LANGUAGE FOR MESSAGES
  2582.     AX = 0023h
  2583. Return:    ???
  2584. ---------------------------------------------
  2585. INT 33 - MS MOUSE - GET SOFTWARE VERSION AND MOUSE TYPE
  2586.     AX = 0024h
  2587. Return: AX = FFFFh on error
  2588.     otherwise,
  2589.         BH = major version
  2590.         BL = minor version
  2591.         CH = type (1=bus, 2=serial, 3=InPort, 4=PS/2, 5=HP)
  2592.         CL = interrupt (0=PS/2, 2=IRQ2, 3=IRQ3,...,7=IRQ7)
  2593. ---------------------------------------------
  2594. INT 33 - PCMOUSE - GET MSMOUSE STORAGE REQUIREMENTS
  2595.     AX = 0042h
  2596. Return: AX = FFFFh successful
  2597.         BX = buffer size in bytes for functions 50h and 52h
  2598.        = 0000h MSMOUSE not installed
  2599.        = 0042h functions 42h, 50h, and 52h not supported
  2600. ---------------------------------------------
  2601. INT 33 - PCMOUSE - SAVE MSMOUSE STATE
  2602.     AX = 0050h
  2603.     BX = buffer size
  2604.     ES:DX -> buffer
  2605. Return: AX = FFFFh if successful
  2606. ---------------------------------------------
  2607. INT 33 - PCMOUSE - RESTORE MSMOUSE STATE
  2608.     AX = 0052h
  2609.     BX = buffer size
  2610.     ES:DX -> buffer
  2611. Return: AX = FFFFh if successful
  2612. ---------------------------------------------
  2613. INT 34 - Borland/Microsoft languages - Floating Point emulation
  2614.     This interrupt emulates opcode D8h
  2615. ---------------------------------------------
  2616. INT 35 - Borland/Microsoft languages - Floating Point emulation
  2617.     This interrupt emulates opcode D9h
  2618. ---------------------------------------------
  2619. INT 36 - Borland/Microsoft languages - Floating Point emulation
  2620.     This interrupt emulates opcode DAh
  2621. ---------------------------------------------
  2622. INT 37 - Borland/Microsoft languages - Floating Point emulation
  2623.     This interrupt emulates opcode DBh
  2624. ---------------------------------------------
  2625. INT 38 - Borland/Microsoft languages - Floating Point emulation
  2626.     This interrupt emulates opcode DCh
  2627. ---------------------------------------------
  2628. INT 39 - Borland/Microsoft languages - Floating Point emulation
  2629.     This interrupt emulates opcode DDh
  2630. ---------------------------------------------
  2631. INT 3A - Borland/Microsoft languages - Floating Point emulation
  2632.     This interrupt emulates opcode DEh
  2633. ---------------------------------------------
  2634. INT 3B - Borland/Microsoft languages - Floating Point emulation
  2635.     This interrupt emulates opcode DFh
  2636. ---------------------------------------------
  2637. INT 3C - Borland/Microsoft languages - Floating Point emulation
  2638.     This interrupt emulates instructions with an ES segment override
  2639. ---------------------------------------------
  2640. INT 3D - Borland/Microsoft languages - Floating Point emulation
  2641.     This interrupt emulates a standalone FWAIT instruction
  2642. ---------------------------------------------
  2643. INT 3E - Borland languages - Floating Point emulation "shortcut" call
  2644.     The two bytes following the INT 3E instruction are the subcode and
  2645.     a NOP (90h)
  2646.  
  2647. Subcode        Function
  2648.  DCh    Load 8086 Stack with 8087 Registers
  2649.  DEh    Load 8087 Registers from 8086 Stack
  2650.  E0h    ??? (possibly check of form A <= X <= B)
  2651.  E2h    ???
  2652.  E4h    compare TOS/R1 with two POP's
  2653.  E6h    compare TOS/R1 with POP
  2654.  E8h    FTST (check TOS value)
  2655.  EAh    FXAM (check TOS value)
  2656.  ECh    Sin
  2657.  EEh    Cos
  2658.  F0h    ArcTan
  2659.  F2h    check TOS value
  2660.  F4h    Ln (FLDLN2 to TOS)
  2661.  F6h    FLD1 to TOS
  2662.  F8h    FLDLG2 to TOS
  2663.  FAh    Exp (FLDL2E to TOS)
  2664.  FCh    ???
  2665.  FEh    FLDL2T to TOS
  2666. ---------------------------------------------
  2667. INT 3F - Overlay manager interrupt (Microsoft LINK.EXE)
  2668. ---------------------------------------------
  2669. INT 3F - Microsoft Dynamic Link Library manager
  2670. ---------------------------------------------
  2671. INT 40 - Hard disk - Relocated Floppy Handler (original INT 13h)
  2672. ---------------------------------------------
  2673. INT 41 - FIXED DISK PARAMETERS (XT,AT,XT2,XT286,PS except ESDI disks)
  2674. Offset    Size    Description
  2675.  00h    WORD    cylinders
  2676.  02h    BYTE    heads
  2677.  03h    WORD    starting reduced write current cylinder (XT only, 0 for others)
  2678.  05h    WORD    starting write pre-comp cylinder
  2679.  07h    BYTE    maximum ECC burst length
  2680.  08h    BYTE    control byte
  2681.            bits 0-2: drive option (XT only, 0 for others)
  2682.            bit 3:    set if more than 8 heads
  2683.            bit 4:    always 0
  2684.            bit 5:    set if manufacturer's defect map on max cylinder+1
  2685.            bit 6:    disable ECC retries
  2686.            bit 7:    disable access retries
  2687.  09h    BYTE    standard timeout (XT only, 0 for others)
  2688.  0Ah    BYTE    formatting timeout (XT only, 0 for others)
  2689.  0Bh    BYTE    timeout for checking drive (XT only, 0 for others)
  2690.  0Ch    WORD    landing zone (AT/PS2)
  2691.  0Eh    BYTE    sectors/track (AT/PS2)
  2692.  0Fh    BYTE    0
  2693. ---------------------------------------------
  2694. INT 42 - EGA/VGA/PS - Relocated (by EGA) Video Handler (original INT 10h)
  2695. ---------------------------------------------
  2696. INT 42 - Z100 - ???
  2697. ---------------------------------------------
  2698. INT 43 - EGA/VGA/PS - User font table
  2699. ---------------------------------------------
  2700. INT 44 - EGA/VGA/CONV/PS - EGA/PCjr fonts, characters 00h to 7Fh
  2701. ---------------------------------------------
  2702. INT 44 - Novell NetWare - HIGH-LEVEL LANGUAGE API
  2703. ---------------------------------------------
  2704. INT 44 - Z100 - ???
  2705. ---------------------------------------------
  2706. INT 45 - Z100 - ???
  2707. ---------------------------------------------
  2708. INT 46 - Secondary Fixed Disk Params (see INT 41) (AT,XT286,PS except ESDI)
  2709. ---------------------------------------------
  2710. INT 46 - Z100 - ???
  2711. ---------------------------------------------
  2712. INT 47 - reserved
  2713. ---------------------------------------------
  2714. INT 48 - PCjr - Cordless Keyboard Translation
  2715. ---------------------------------------------
  2716. INT 49 - PCjr - Non-keyboard Scan Code Translation Table
  2717. ---------------------------------------------
  2718. INT 4A - AT/CONV/PS - User Alarm
  2719.     Invoked by BIOS when real-time clock alarm occurs
  2720. ---------------------------------------------
  2721. INT 4B - reserved
  2722. ---------------------------------------------
  2723. INT 4C - reserved
  2724. ---------------------------------------------
  2725. INT 4D - reserved
  2726. ---------------------------------------------
  2727. INT 4E - reserved
  2728. ---------------------------------------------
  2729. INT 4F - reserved
  2730. ---------------------------------------------
  2731. INT 50 - through 57 - IRQ0-IRQ7 relocated by DESQview
  2732. ---------------------------------------------
  2733. INT 50 - through 57 - IRQ0-IRQ7 relocated by IBM 3278 emulation control program
  2734. ---------------------------------------------
  2735. INT 58 - reserved
  2736. ---------------------------------------------
  2737. INT 59 - GSS Computer Graphics Interface (GSS*CGI)
  2738.     DS:DX -> block of 5 array pointers
  2739. Return:    CF set on error
  2740.         AX = error code
  2741.     CF clear if successful
  2742.         AX = return code
  2743. Note: INT 59 is the means by which GSS*CGI language bindings communicate with
  2744.       GSS*CGI device drivers and the GSS*CGI device driver controller.    also
  2745.       used by the IBM Graphic Development Toolkit
  2746. ---------------------------------------------
  2747. INT 5A - Cluster adapter BIOS entry address
  2748.     ???
  2749. ---------------------------------------------
  2750. INT 5B - Used by cluster adapter
  2751. ---------------------------------------------
  2752. INT 5C - NETBIOS INTERFACE
  2753.     ES:BX -> Network Control Block (see below)
  2754. Return: AL = status
  2755.         00h successful
  2756.         01h bad buffer size
  2757.         03h invalid NETBIOS command
  2758.         05h timeout
  2759.         06h receive buffer too small
  2760.         08h bad session number
  2761.         09h LAN card out of memory
  2762.         0Ah session closed
  2763.         0Bh command has been cancelled
  2764.         0Dh name already exists
  2765.         0Eh local name table full
  2766.         0Fh name still in use, can't delete
  2767.         11h local session table full
  2768.         12h remote PC not listening
  2769.         13h bad NCB_NUM field
  2770.         14h no answer to CALL or no such remote
  2771.         15h name not in local name table
  2772.         16h duplicate name
  2773.         17h bad delete
  2774.         18h abnormal end
  2775.         19h name error, multiple identical names in use
  2776.         1Ah bad packet
  2777.         21h network card busy
  2778.         22h too many commands queued
  2779.         23h bad LAN card number
  2780.         24h command finished while cancelling
  2781.         26h command can't be cancelled
  2782.         FFh NETBIOS busy
  2783.  
  2784. Format of Network Control Block:
  2785. Offset    Size  Description
  2786.  00h    BYTE  ncb_command (see below)
  2787.  01h    BYTE  ncb_retcode
  2788.  02h    BYTE  ncb_lsn
  2789.  03h    BYTE  ncb_num
  2790.  04h    DWORD -> ncb_buffer
  2791.  08h    WORD  ncb_length
  2792.  0Ah 16 BYTEs ncb_callname
  2793.  1Ah 16 BYTEs ncb_name
  2794.  2Ah    BYTE  ncb_rto
  2795.  2Bh    BYTE  ncb_sto
  2796.  2Ch    DWORD -> ncb_post      /* int (far *ncb_post)(); */
  2797.  30h    BYTE  ncb_lana_num
  2798.  31h    BYTE  ncb_cmd_cplt
  2799.  32h 14 BYTEs ncb_reserve
  2800.  
  2801. Values for ncb_command field in NCB (or with 80h for non-waiting call):
  2802.     10h start session with NCB_NAME name (call)
  2803.     11h listen for call
  2804.     12h end session with NCB_NAME name (hangup)
  2805.     14h send data via NCB_LSN
  2806.     15h receive data from a session
  2807.     16h receive data from any session
  2808.     17h send multiple data buffers
  2809.     20h send unACKed message (datagram)
  2810.     21h receive datagram
  2811.     22h send broadcast datagram
  2812.     23h receive broadcast datagram
  2813.     30h add name to name table
  2814.     31h delete name from name table
  2815.     32h reset adapter card and tables
  2816.     33h get adapter status
  2817.     34h status of all sessions for name
  2818.     35h cancel
  2819.     36h add group name to name table
  2820.     70h unlink from IBM remote program (no F0h function)
  2821.     71h send data without ACK
  2822.     72h send multiple buffers without ACK
  2823.     78h find name
  2824.     79h token-ring protocol trace
  2825.  
  2826. Format of struc name:
  2827. Offset    Size    Description
  2828.  00h 16 BYTEs nm_name
  2829.  10h    BYTE  nm_num
  2830.  11h    BYTE  nm_status
  2831.  
  2832. Format of structure astatus:
  2833.  00h  6 BYTEs as_id
  2834.  06h    BYTE  as_jumpers
  2835.  07h    BYTE  as_post
  2836.  08h    BYTE  as_major
  2837.  09h    BYTE  as_minor
  2838.  0Ah    WORD  as_interval
  2839.  0Ch    WORD  as_crcerr
  2840.  0Eh    WORD  as_algerr
  2841.  10h    WORD  as_colerr
  2842.  12h    WORD  as_abterr
  2843.  14h    DWORD as_tcount
  2844.  18h    DWORD as_rcount
  2845.  1Ch    WORD  as_retran
  2846.  1Eh    WORD  as_xresrc
  2847.  20h  8 BYTEs as_res0
  2848.  28h    WORD  as_ncbfree
  2849.  2Ah    WORD  as_ncbmax
  2850.  2Ch    WORD  as_ncbx
  2851.  2Eh  4 BYTEs as_res1
  2852.  32h    WORD  as_sespend
  2853.  34h    WORD  as_msp
  2854.  36h    WORD  as_sesmax
  2855.  38h    WORD  as_bufsize
  2856.  3Ah    WORD  as_names
  2857.  3Ch 16 name structures  as_name
  2858.  
  2859. Note: Sytek PCnet card uses DMA 3.
  2860. ---------------------------------------------
  2861. INT 5C - TOPS INTERFACE
  2862.     ES:BX -> Network Control Block
  2863. Note: TOPS card uses DMA 1, 3 or none.
  2864. ---------------------------------------------
  2865. INT 5D - reserved
  2866. ---------------------------------------------
  2867. INT 5E - reserved
  2868. ---------------------------------------------
  2869. INT 5F - reserved
  2870. ---------------------------------------------
  2871. INT 60 - FTP Driver - PC/TCP Packet Driver Specification
  2872.    The handler for the interrupt will start with a 3-byte jump instruction, 
  2873.    followed by the ASCIZ string "PKT DRVR".  To find the interrupt being used
  2874.    by the driver, an application should scan through interrupt vectors 60h to
  2875.    80h until it finds one with the "PKT DRVR" string.
  2876. ---------------------------------------------
  2877. INT 60 - SYS_PROF.EXE - PROFILER STATUS
  2878.     AH = 00h
  2879. Return: AX = 0000h    profiling is off
  2880.         otherwise profiling is on
  2881. Note: SYS_PROF.EXE is the TSR portion of a profiler from Micro Cornucopia #47
  2882. ---------------------------------------------
  2883. INT 60 - FTP Driver - DRIVER INFO
  2884.     AX = 01FFh
  2885.     BX = handler returned by function 02h
  2886. Return: CF set on error
  2887.         DH = error code (see below)
  2888.     CF clear if successful
  2889.         BX = version
  2890.         CH = network interface class (see below)
  2891.         DX = interface type (see below)
  2892.         CL = number
  2893.         DS:SI -> name
  2894.         AL = driver type
  2895.         01h basic
  2896.         02h extended
  2897.         FFh not installed
  2898.  
  2899. Values for error code:
  2900.     01h invalid handle number
  2901.     02h no interfaces of the specified class found
  2902.     03h no interfaces of the specified type found
  2903.     04h no interfaces of the specified number found
  2904.     05h bad packet type
  2905.     06h interface does not support multicast messages
  2906.     07h this packet driver cannot terminate
  2907.     08h invalid receiver mode
  2908.     09h insufficient space
  2909.     0Ah type accessed but never released
  2910.     0Bh bad command
  2911.     0Ch packet could not be sent
  2912.  
  2913. Values for Network Interface classes/types:
  2914.     Class 01h  Ethernet/IEEE 802.3     
  2915.     01h 3COM 3C500/3C501
  2916.     02h 3COM 3C505
  2917.     03h MICOM-Interlan NI5010
  2918.     04h BICC Data Networks 4110
  2919.     05h BICC Data Networks 4117
  2920.     06h MICOM-Interlan NP600
  2921.     08h Ungermann-Bass PC-NIC
  2922.     09h Univation NC-516
  2923.     0Ah TRW PC-2000    
  2924.     0Bh MICOM-Interlan NI5210
  2925.     0Ch 3COM 3C503
  2926.     0Dh 3COM 3C523
  2927.     0Eh Western Digital WD8003
  2928.     0Fh Spider Systems S4
  2929.     Class 02h  ProNET-10
  2930.     01h Proteon p1300
  2931.     Class 03h  IEEE 802.5/ProNet-4
  2932.     01h IBM Token-Ring Adapter
  2933.     02h Proteon p1340
  2934.     03h Proteon p1344
  2935.     Class 04h  Omninet
  2936.     Class 05h  Appletalk
  2937.     Class 06h  Serial Line
  2938.     Class 07h  StarLAN
  2939.     Class 08h  ARCnet
  2940.     01h Datapoint RIM    
  2941. ---------------------------------------------
  2942. INT 60 - SYS_PROF.EXE - TURN PROFILING OFF
  2943.     AH = 01h
  2944. Note: SYS_PROF.EXE is the TSR portion of a profiler from Micro Cornucopia #47
  2945. ---------------------------------------------
  2946. INT 60 - FTP Driver - ACCESS TYPE
  2947.     AH = 02h
  2948.     AL = interface class
  2949.     BX = interface type
  2950.     DL = interface number
  2951.     DS:SI -> type
  2952.     CX = length of type
  2953.     ES:DI -> receiver
  2954. Return: CF set on error
  2955.         DH = error code (see AX=01FFh)
  2956.     CF clear if successful
  2957.         AX = handle            
  2958.  
  2959. Receiver is called with
  2960.     AX = subfunction
  2961.         00h application to return pointer to buffer in ES:DI
  2962.         ES:DI = 0000h:0000h means throw away packet
  2963.         01h copy to DS:SI buffer completed
  2964.     BX = handle
  2965.     CX = buffer length
  2966. when a packet is received
  2967. ---------------------------------------------
  2968. INT 60 - SYS_PROF.EXE - TURN PROFILING ON
  2969.     AH = 02h
  2970. Note: SYS_PROF.EXE is the TSR portion of a profiler from Micro Cornucopia #47
  2971. ---------------------------------------------
  2972. INT 60 - FTP Driver - RELEASE TYPE
  2973.     AH = 03h
  2974.     BX = handle
  2975. Return: CF set on error
  2976.        DH = error code (see AX=01FFh)
  2977.     CF clear if successful    
  2978. ---------------------------------------------
  2979. INT 60 - SYS_PROF.EXE - GET ADDRESS OF PROFILING TABLE
  2980.     AH = 03h
  2981. Return: ES:BX -> profiling table
  2982. Note: SYS_PROF.EXE is the TSR portion of a profiler from Micro Cornucopia #47
  2983. ---------------------------------------------
  2984. INT 60 - FTP Driver - SEND PACKET
  2985.     AH = 04h
  2986.     DS:SI -> buffer
  2987.     CX = length
  2988. Return: CF set on error
  2989.         DH = error code (see AX=01FFh)
  2990. ---------------------------------------------
  2991. INT 60 - SYS_PROF.EXE - CLEAR PROFILING TABLE
  2992.     AH = 04h
  2993. Note: SYS_PROF.EXE is the TSR portion of a profiler from Micro Cornucopia #47
  2994. ---------------------------------------------
  2995. INT 60 - FTP Driver - TERMINATE DRIVER FOR HANDLE
  2996.     AH = 05h
  2997.     BX = handle
  2998. Return: CF set on error
  2999.        DH = error code (see AX=01FFh)
  3000. ---------------------------------------------
  3001. INT 60 - FTP Driver - GET ADDRESS
  3002.     AH = 06h
  3003.     BX = handle
  3004.     ES:DI -> buffer
  3005.     CX = length
  3006. Return: CF set on error
  3007.         DH = error code (see AX=01FFh)
  3008.     CF clear if successful
  3009.         CX = length    
  3010. Note: copies the local net address associated with the handle into the buffer        
  3011. ---------------------------------------------
  3012. INT 60 - FTP Driver - RESET INTERFACE
  3013.     AH = 07h
  3014.     BX = handle
  3015. Return: CF set on error
  3016.         DH = error code (see AX=01FFh)
  3017. ---------------------------------------------
  3018. INT 60 - 10-NET - LOCK AND WAIT
  3019.     AH = 11h
  3020.     AL = drive number or 0
  3021.     DX = number of seconds to wait
  3022.     ES:SI = Ethernet address or 0
  3023.     DS:BX -> 31-byte ASCIZ semaphore name
  3024. Return: AL = status
  3025.         00h successful
  3026.         01h timeout
  3027.         02h server not responding
  3028.         03h invalid semaphore name
  3029.         04h semaphore list is full
  3030.         05h invalid drive ID
  3031.         06h invalid Ethernet address
  3032.         07h not logged in
  3033.         08h write to network failed
  3034.         09h semaphore already logged for this CPU
  3035. ---------------------------------------------
  3036. INT 60 - 10-NET - LOCK
  3037.     AH = 12h
  3038.     AL = drive number or 00h
  3039.     ES:SI = Ethernet address or 0000h:0000h
  3040.     DS:BX -> 31-byte ASCIZ semaphore name
  3041. Return: AL = status (see also AH=11h)
  3042.         01h semaphore currently logged
  3043. Note: unlike function 11h, this function returns immediately
  3044. ---------------------------------------------
  3045. INT 60 - 10-NET - UNLOCK
  3046.     AH = 13h
  3047.     AL = drive number or 00h
  3048.     ES:SI = Ethernet address or 0000h:0000h
  3049.     DS:BX -> 31-byte ASCIZ semaphore name
  3050. Return: AL = status (see also AH=11h)
  3051.         1 semaphore not logged
  3052. ---------------------------------------------
  3053. INT 60 - FTP Driver - SET RECEIVE MODE
  3054.     AH = 20h
  3055.     BX = handle
  3056.     CX = mode
  3057.         01h turn off receiver
  3058.         02h receive only packets sent to this interface
  3059.         03h mode 2 plus broadcast packets
  3060.         04h mode 3 plus limited multicast packets
  3061.         05h mode 3 plus all multicast packets
  3062.         06h all packets
  3063. Return: CF set on error
  3064.        DH = error code
  3065. ---------------------------------------------
  3066. INT 60 - FTP Driver - GET RECEIVE MODE
  3067.     AH = 21h
  3068.     BX = handle
  3069. Return: CF set on error
  3070.         DH = error code (see AX=01FFh)
  3071.     CF clear if successful
  3072.         AX = mode    
  3073. ---------------------------------------------
  3074. INT 60 - FTP Driver - GET STATISTICS
  3075.     AH = 24h
  3076.     BX = handle
  3077. Return: CF set on error
  3078.         DH = error code
  3079.     CF clear if successful
  3080.         DS:SI -> statistics (see below)
  3081.  
  3082. Format of statistics:
  3083. Offset    Size    Description
  3084.  00h    DWORD    packets in
  3085.  04h    DWORD    packets out
  3086.  08h    DWORD    bytes in
  3087.  0Ch    DWORD    bytes out
  3088.  10h    DWORD    errors in
  3089.  14h    DWORD    errors out
  3090.  18h    DWORD    packets dropped    
  3091. ---------------------------------------------
  3092. INT 61 - reserved for user interrupt
  3093. ---------------------------------------------
  3094. INT 62 - reserved for user interrupt
  3095. ---------------------------------------------
  3096. INT 63 - reserved for user interrupt
  3097. ---------------------------------------------
  3098. INT 64 - Novell NetWare - LOW-LEVEL API
  3099. Note: equivalent to INT 7A
  3100. ---------------------------------------------
  3101. INT 65 - reserved for user interrupt
  3102. ---------------------------------------------
  3103. INT 65 - SD.COM v6.2
  3104.    The unregistered version of SD62.COM uses the low byte of this vector to
  3105.    count the number of invocations, displaying a registration reminder each
  3106.    time after the 20th use.
  3107. ---------------------------------------------
  3108. INT 66 - reserved for user interrupt
  3109. ---------------------------------------------
  3110. INT 66 - THESPLUS - UNINSTALL
  3111.     AX = FFFEh
  3112.     BX = FFFEh
  3113. Return: only if unsuccessful
  3114. Note:   installation check is for the interrupt handler to begin with the bytes
  3115.     FBh, 9Ch, and the string "THESPLUS" to appear at offset 0005h in the
  3116.     interrupt handler segment.
  3117. ---------------------------------------------
  3118. INT 67 - LIM EMS - GET MANAGER STATUS
  3119.     AH = 40h
  3120. Return: AH = status
  3121.         00h successful
  3122.         80h internal error
  3123.         81h hardware malfunction
  3124.         84h undefined function requested by application
  3125. Note: this call can be used only after establishing that the EMS driver
  3126.       is in fact present
  3127. ---------------------------------------------
  3128. INT 67 - LIM EMS - GET PAGE FRAME SEGMENT
  3129.     AH = 41h
  3130. Return: AH = 00h function successful
  3131.         BX = segment of page frame
  3132.     AH = error code (see AH=40h)
  3133. ---------------------------------------------
  3134. INT 67 - LIM EMS - GET NUMBER OF PAGES
  3135.     AH = 42h
  3136. Return: AH = 00h function successful
  3137.         BX = number of unallocated pages
  3138.         DX = total number of pages
  3139.     AH = error code (see AH=40h)
  3140. ---------------------------------------------
  3141. INT 67 - LIM EMS - GET HANDLE AND ALLOCATE MEMORY
  3142.     AH = 43h
  3143.     BX = number of logical pages to allocate
  3144. Return: AH = status
  3145.         00h function successful
  3146.         DX = handle
  3147.         80h internal error
  3148.         81h hardware malfunction
  3149.         84h undefined function requested
  3150.         85h no more handles available
  3151.         87h more pages requested than physically exist
  3152.         88h more pages requested than currently available
  3153.         89h zero pages requested
  3154. ---------------------------------------------
  3155. INT 67 - LIM EMS - MAP MEMORY
  3156.     AH = 44h
  3157.     AL = physical page number (0-3)
  3158.     BX = logical page number
  3159.     DX = handle
  3160. Return: AH = status
  3161.         00h function successful
  3162.         80h internal error
  3163.         81h hardware malfunction
  3164.         83h invalid handle
  3165.         84h undefined function requested
  3166.         8Ah invalid logical page number
  3167.         8Bh illegal physical-page number
  3168. ---------------------------------------------
  3169. INT 67 - LIM EMS - RELEASE HANDLE AND MEMORY
  3170.     AH = 45h
  3171.     DX = EMM handle
  3172. Return: AH = status
  3173.         00h successful
  3174.         80h internal error
  3175.         81h hardware malfunction
  3176.         83h invalid handle
  3177.         84h undefined function requested
  3178.         86h error in save or restore of mapping context
  3179. ---------------------------------------------
  3180. INT 67 - LIM EMS - GET EMM VERSION
  3181.     AH = 46h
  3182. Return: AH = status
  3183.         00h successful
  3184.         AL = EMM version number
  3185.         80h internal error
  3186.         81h hardware malfunction
  3187.         84h undefined function requested
  3188. ---------------------------------------------
  3189. INT 67 - LIM EMS - SAVE MAPPING CONTEXT
  3190.     AH = 47h
  3191.     DX = handle
  3192. Return: AH = status
  3193.         00h successful
  3194.         80h internal error
  3195.         81h hardware malfunction
  3196.         83h invalid handle
  3197.         84h undefined function requested
  3198.         8Ch page-mapping hardware state save area is full
  3199.         8Dh save of mapping context failed
  3200. ---------------------------------------------
  3201. INT 67 - LIM EMS - RESTORE MAPPING CONTEXT
  3202.     AH = 48h
  3203.     DX = handle
  3204. Return: AH = status
  3205.         00h successful
  3206.         80h internal error
  3207.         81h hardware malfunction
  3208.         83h invalid handle
  3209.         84h undefined function requested
  3210.         8Eh restore of mapping context failed
  3211. ---------------------------------------------
  3212. INT 67 - LIM EMS - reserved - GET I/O PORT ADDRESSES
  3213.     AH = 49h
  3214. Note: defined in EMS 3.0, but undocumented in EMS 3.2
  3215. ---------------------------------------------
  3216. INT 67 - LIM EMS - reserved - GET TRANSLATION ARRAY
  3217.     AH = 4Ah
  3218. Note: defined in EMS 3.0, but undocumented in EMS 3.2
  3219. ---------------------------------------------
  3220. INT 67 - LIM EMS - GET NUMBER OF EMM HANDLES
  3221.     AH = 4Bh
  3222. Return: AH = status
  3223.         00h successful
  3224.         BX = number of EMM handles
  3225.         80h internal error
  3226.         81h hardware malfunction
  3227.         83h invalid handle
  3228.         84h undefined function requested
  3229. ---------------------------------------------
  3230. INT 67 - LIM EMS - GET PAGES OWNED BY HANDLE
  3231.     AH = 4Ch
  3232.     DX = EMM handle
  3233. Return: AH = status
  3234.         00h successful
  3235.         BX = number of logical pages
  3236.         80h internal error
  3237.         81h hardware malfunction
  3238.         83h invalid handle
  3239.         84h undefined function requested
  3240. ---------------------------------------------
  3241. INT 67 - LIM EMS - GET PAGES FOR ALL HANDLES
  3242.     AH = 4Dh
  3243.     ES:DI -> array to receive information
  3244. Return: AH = status
  3245.         00h successful
  3246.         BX = number of active EMM handles
  3247.         array filled with 2-word entries, consisting of a handle
  3248.           and the number of pages allocated to that handle
  3249.         80h internal error
  3250.         81h hardware malfunction
  3251.         84h undefined function requested
  3252. ---------------------------------------------
  3253. INT 67 - LIM EMS - GET OR SET PAGE MAP
  3254.     AH = 4Eh
  3255.     AL = 00h if getting mapping registers
  3256.          01h if setting mapping registers
  3257.          02h if getting and setting mapping registers at once
  3258.          03h if getting size of page-mapping array
  3259.     DS:SI -> array holding information (AL=01/02)
  3260.     ES:DI -> array to receive information (AL=00/02)
  3261. Return: AH = status
  3262.         00h successful
  3263.         AL = bytes in page-mapping array (AL=03h only)
  3264.         array pointed to by ES:DI receives mapping info (AL=00h/02h)
  3265.         80h internal error
  3266.         81h hardware malfunction
  3267.         84h undefined function requested
  3268.         8Fh undefined subfunction parameter
  3269.         A3h contents of source array corrupted (EMS 4.0?)
  3270. Note: this function was designed to be used by multitasking operating systems
  3271.       and should not ordinarily be used by appplication software.
  3272. ---------------------------------------------
  3273. INT 67 - LIM EMS 4.0 - GET/SET PARTIAL PAGE MAP
  3274.     AH = 4Fh
  3275.     AL = subfunction
  3276.         00h get partial page map
  3277.            DS:SI -> structure containing list of segments whose mapping
  3278.             contexts are to be saved
  3279.            ES:DI -> array to receive page map
  3280.         01h set partial page map
  3281.            DS:SI -> structure containing saved partial page map
  3282.         02h get size of partial page map
  3283.            BX = number of mappable segments in the partial map to be saved
  3284. Return: AH = status
  3285.         00h successful
  3286.         80h internal error
  3287.         81h hardware malfunction
  3288.         84h undefined function requested
  3289.         8Bh one of specified segments is not mappable
  3290.         8Fh undefined subfunction parameter
  3291.         A3h contents of partial page map corrupted or count of mappable
  3292.         segments exceeds total number of mappable segments in system
  3293.     AL = size of partial page map for subfunction 02h
  3294. ---------------------------------------------
  3295. INT 67 - LIM EMS 4.0 - MAP/UNMAP MULTIPLE HANDLE PAGES
  3296.     AH = 50h
  3297.     AL = subfunction
  3298.         00h
  3299.         01h
  3300.     DX = handle
  3301.     CX = number of entries in array
  3302.     DS:SI -> mapping array
  3303. Return: AH = status
  3304.         00h successful
  3305.         80h internal error
  3306.         81h hardware malfunction
  3307.         83h invalid handle
  3308.         84h undefined function requested
  3309.         8Ah one or more logical pages are invalid
  3310.         8Bh one or more physical pages are invalid
  3311.         8Fh invalid subfunction
  3312. ---------------------------------------------
  3313. INT 67 - LIM EMS 4.0 - REALLOCATE PAGES
  3314.     AH = 51h
  3315.     DX = handle
  3316.     BX = number of pages to be allocated to handle
  3317. Return: BX = actual number of pages allocated to handle
  3318.     AH = status
  3319.         00h successful
  3320.         80h internal error
  3321.         81h hardware malfunction
  3322.         83h invalid handle
  3323.         84h undefined function requested
  3324.         87h more pages requested than present in system
  3325.         88h more pages requested than currently available
  3326. ---------------------------------------------
  3327. INT 67 - LIM EMS 4.0 - GET/SET HANDLE ATTRIBUTES
  3328.     AH = 52h
  3329.     AL = subfunction
  3330.         00h get handle attributes
  3331.         Return: AL = attribute
  3332.                 00h handle is volatile
  3333.                 01h handle is nonvolatile
  3334.         01h set handle attributes
  3335.         BL = new attribute (see returned AL)
  3336.         02h get attribute capability
  3337.         Return: AL = attribute capability
  3338.                 00h only volatile handles supported
  3339.                 01h both volatile and non-volatile supported
  3340.     DX = handle
  3341. Return:    AH = status
  3342.         00h successful
  3343.         80h internal error
  3344.         81h hardware malfunction
  3345.         83h invalid handle
  3346.         84h undefined function requested
  3347.         8Fh undefined subfunction
  3348.         90h undefined attribute type
  3349.         91h feature not supported
  3350. ---------------------------------------------
  3351. INT 67 - LIM EMS 4.0 - GET/SET HANDLE NAME
  3352.     AH = 53h
  3353.     AL = subfunction
  3354.         00h get handle name
  3355.            ES:DI -> 8-byte handle name array
  3356.         01h set handle name
  3357.            DS:SI -> 8-byte handle name
  3358.     DX = handle
  3359. Return: AH = status
  3360.         00h successful
  3361.         80h internal error
  3362.         81h hardware malfunction
  3363.         83h invalid handle
  3364.         84h undefined function requested
  3365.         8Fh undefined subfunction
  3366.         A1h duplicate handle name
  3367. ---------------------------------------------
  3368. INT 67 - LIM EMS 4.0 - GET HANDLE DIRECTORY
  3369.     AH = 54h
  3370.     AL = subfunction
  3371.         00h get handle directory
  3372.            ES:DI -> buffer for handle directory
  3373.         01h search for named handle
  3374.            DS:SI -> 8-byte name
  3375.         02h get total number of handles
  3376. Return: AL = number of entries in handle directory (subfunction 00h)
  3377.     DX = value of named handle (subfunction 01h)
  3378.     BX = total number of handles (subfunction 02h)
  3379.     AH = status
  3380.         00h successful
  3381.         80h internal error
  3382.         81h hardware malfunction
  3383.         84h undefined function requested
  3384.         8Fh undefined subfunction
  3385.         A0h no such handle name
  3386.         A1h a handle found had no name
  3387. ---------------------------------------------
  3388. INT 67 - LIM EMS 4.0 - ALTER PAGE MAP AND JUMP
  3389.     AH = 55h
  3390.     AL = subfunction
  3391.         00h physical page numbers provided by caller
  3392.         01h segment addresses provided by caller
  3393.     DX = handle
  3394.     DS:SI -> structure containing map and jump address
  3395. Return: (at target address unless error)
  3396.     AH = status
  3397.         00h successful
  3398.         80h internal error
  3399.         81h hardware failure
  3400.         83h invalid handle
  3401.         84h undefined function requested
  3402.         8Ah invalid logical page number encountered
  3403.         8Bh invalid physical page number encountered
  3404.         8Fh invalid subfunction
  3405. ---------------------------------------------
  3406. INT 67 - LIM EMS 4.0 - ALTER PAGE MAP AND CALL
  3407.     AH = 56h
  3408.     AL = subfunction
  3409.         00h physical page numbers provided by caller
  3410.         DX = handle
  3411.         DS:SI -> structure containing page map and call address
  3412.         01h segment addresses provided by caller
  3413.         DX = handle
  3414.         DS:SI -> structure containing page map and call address
  3415.         02h get page map stack space required
  3416.         Return: BX = stack space required
  3417. Return: (if successful, the target address is called.  Use a RETF to return and
  3418.      restore mapping context)
  3419.     AH = status (see AH=55h)
  3420. ---------------------------------------------
  3421. INT 67 - LIM EMS 4.0 - MOVE/EXCHANGE MEMORY REGION
  3422.     AH = 57h
  3423.     AL = subfunction
  3424.         00h move memory region
  3425.         01h exchange memory region
  3426.     DS:SI -> structure describing source and destination
  3427. Return: AH = status
  3428.         00h successful
  3429.         80h internal error
  3430.         81h hardware failure
  3431.         83h invalid handle
  3432.         84h undefined function requested
  3433.         8Ah invalid logical page number encountered
  3434.         8Fh undefined subfunction
  3435.         92h successful, but a portion of the source region has been
  3436.         overwritten
  3437.         93h length of source or destination region exceeds length of region
  3438.         allocated to either source or destination handle
  3439.         94h conventional and expanded memory regions overlap
  3440.         95h offset within logical page exceeds size of logical page
  3441.         96h region length exceeds 1M
  3442.         97h source and destination EMS regions have same handle and overlap
  3443.         98h memory source or destination type undefined
  3444.         A2h attempted to wrap around 1M conventional address space
  3445. ---------------------------------------------
  3446. INT 67 - LIM EMS 4.0 - GET MAPPABLE PHYSICAL ADDRESS ARRAY
  3447.     AH = 58h
  3448.     AL = subfunction
  3449.         00h get mappable physical address array
  3450.         ES:DI -> buffer to be filled with array
  3451.         01h get number of entries in m.p.a. array
  3452. Return: CX = number of entries in array
  3453.     AH = status
  3454.         00h successful
  3455.         80h internal error
  3456.         81h hardware failure
  3457.         84h undefined function requested
  3458.         8Fh undefined subfunction
  3459. ---------------------------------------------
  3460. INT 67 - LIM EMS 4.0 - GET EXPANDED MEMORY HARDWARE INFORMATION
  3461.     AH = 59h
  3462.     AL = subfunction
  3463.         00h get hardware configuration array
  3464.         ES:DI -> buffer to be filled with array
  3465.         01h get unallocated raw page count
  3466.         Return: BX = unallocated raw pages
  3467.             DX = total raw pages
  3468. Return:    AH = status
  3469.         00h successful
  3470.         80h internal error
  3471.         81h hardware failure
  3472.         84h undefined function requested
  3473.         8Fh undefined subfunction
  3474.         A4h access denied by operating system
  3475. Note: subfunction 00h is for use by operating systems only, and can be
  3476.       enabled or disabled at any time by the operating system
  3477. ---------------------------------------------
  3478. INT 67 - LIM EMS 4.0 - ALLOCATE STANDARD/RAW PAGES
  3479.     AH = 5Ah
  3480.     AL = subfunction
  3481.         00h allocate standard pages
  3482.         01h allocate raw pages
  3483.     BX = number of pages to allocate
  3484. Return: DX = handle
  3485.     AH = status
  3486.         00h successful
  3487.         80h internal error
  3488.         81h hardware failure
  3489.         84h undefined function requested
  3490.         85h no more handles available
  3491.         87h insufficient memory pages in system
  3492.         88h insufficient memory pages available
  3493.         8Fh undefined subfunction
  3494. ---------------------------------------------
  3495. INT 67 - LIM EMS 4.0 - ALTERNATE MAP REGISTER SET
  3496.     AH = 5Bh
  3497.     AL = subfunction
  3498.         00h get alternate map register set
  3499.         Return: BL = current active alternate map register set number
  3500.             ES:DI -> map register context save area if BL=00h
  3501.         01h set alternate map register set
  3502.         BL = new alternate map register set number
  3503.         ES:DI -> map register context save area if BL=0
  3504.         02h get alternate map save array size
  3505.         Return: DX = array size in bytes
  3506.         03h allocate alternate map register set
  3507.         Return: BL = number of map register set; 00h = not supported
  3508.         04h deallocate alternate map register set
  3509.         BL = number of alternate map register set
  3510. Return: AH = status
  3511.         00h successful
  3512.         80h internal error
  3513.         81h hardware malfunction
  3514.         84h undefined function requested
  3515.         8Fh undefined subfunction
  3516.         9Ah specified alternate map register set not supported
  3517.         9Bh all alternate map register sets currently allocated
  3518.         9Ch alternate map register sets not supported
  3519.         9Dh undefined or unallocated alternate map register set
  3520.         A3h source array corrupted
  3521.         A4h operating system denied access
  3522. Note: this function is for use by operating systems only, and can be
  3523.       enabled or disabled at any time by the operating system
  3524. ---------------------------------------------
  3525. INT 67 - LIM EMS 4.0 - ALTERNATE MAP REGISTER SET - DMA REGISTERS
  3526.     AH = 5Bh
  3527.     AL = subfunction
  3528.         05h allocate DMA register set
  3529.         Return: BL = DMA register set number, 00h if not supported
  3530.         06h enable DMA on alternate map register set
  3531.            BL = DMA register set number
  3532.            DL = DMA channel number
  3533.         07h disable DMA on alternate map register set
  3534.            BL = DMA register set number
  3535.         08h deallocate DMA register set
  3536.            BL = DMA register set number
  3537. Return: AH = status
  3538.         00h successful
  3539.         80h internal error
  3540.         81h hardware malfunction
  3541.         84h undefined function requested
  3542.         8Fh undefined subfunction
  3543.         9Ah specified DMA register set not supported
  3544.         9Bh all DMA register sets currently allocated
  3545.         9Ch alternate DMA sets not supported
  3546.         9Dh undefined or unallocated DMA register set
  3547.         9Eh dedicated DMA channels not supported
  3548.         9Fh specified dedicated DMA channel not supported
  3549.         A3h source array corrupted
  3550.         A4h operating system denied access
  3551. Note: this function is for use by operating systems only, and can be
  3552.       enabled or disabled at any time by the operating system
  3553. ---------------------------------------------
  3554. INT 67 - LIM EMS 4.0 - PREPARE EXPANDED MEMORY HARDWARE FOR WARM BOOT
  3555.     AH = 5Ch
  3556. Return: AH = status
  3557.         00h successful
  3558.         80h internal error
  3559.         81h hardware malfunction
  3560.         84h undefined function requested
  3561. ---------------------------------------------
  3562. INT 67 - LIM EMS 4.0 - ENABLE/DISABLE OS FUNCTION SET FUNCTIONS
  3563.     AH = 5Dh
  3564.     AL = subfunction
  3565.         00h enable OS Function Set
  3566.         01h disable OS Function Set
  3567.         02h return access key (resets memory manager, returns access key at
  3568.         next invocation)
  3569.     BX,CX = access key returned by first invocation
  3570. Return: BX,CX = access key, returned only on first invocation of function
  3571.     AH = status
  3572.         00h successful
  3573.         80h internal error
  3574.         81h hardware malfunction
  3575.         84h undefined function requested
  3576.         8Fh undefined subfunction
  3577.         A4h operating system denied access
  3578. ---------------------------------------------
  3579. INT 67 - EEMS - GET PHYSICAL WINDOW ARRAY
  3580.     AH = 60h
  3581.     ES:DI -> buffer
  3582. Return: AH = status
  3583.     AL = number of entries
  3584.     buffer at ES:DI filled
  3585. ---------------------------------------------
  3586. INT 67 - EEMS - GENERIC ACCELERATOR CARD SUPPORT
  3587.     AH = 61h
  3588.     ???
  3589. Return: ???
  3590. Note: can be used by accelerator card manufacturer to flush RAM cache, ensuring
  3591.       that the cache accurately reflects what the processor would see without
  3592.       the cache.
  3593. ---------------------------------------------
  3594. INT 67 - EEMS - GET ADDRESSES OF ALL PAGE FRAMES IN SYSTEM
  3595.     AH = 68h
  3596.     ES:DI -> buffer
  3597. Return: AH = status
  3598.     AL = number of entries
  3599.     buffer at ES:DI filled
  3600. Note: equivalent to LIM 4.0 function 58h
  3601. ---------------------------------------------
  3602. INT 67 - EEMS - MAP PAGE INTO FRAME
  3603.     AH = 69h
  3604.     AL = frame number
  3605.     BX = page number
  3606.     DX = handle
  3607. Return: AH = status
  3608. Note: similar to EMS function 44h
  3609. ---------------------------------------------
  3610. INT 67 - EEMS - PAGE MAPPING
  3611.     AH = 6Ah
  3612.     AL = subfunction
  3613.         00h save partial page map
  3614.         CH = first page frame
  3615.         CL = number of frames
  3616.         ES:DI -> buffer which is to be filled
  3617.         01h restore partial page map
  3618.         CH = first page frame
  3619.         CL = number of frames
  3620.         DI:SI -> previously saved page map
  3621.         02h save and restore partial page map
  3622.         CH = first page frame
  3623.         CL = number of frames
  3624.         ES:DI = buffer for current page map
  3625.         DI:SI = new page map
  3626.         03h get size of save array
  3627.         CH = first page frame
  3628.         CL = number of frames
  3629.         Return: AL = size of array in bytes
  3630.         04h switch to standard map register setting
  3631.         05h switch to alternate map register setting
  3632.         06h deallocate pages mapped to frames in conventional memory
  3633.         CH = first page frame
  3634.         CL = number of frames
  3635. Return: AH = status
  3636. Note: similar to EMS function 4Eh, except that a subrange of pages can
  3637.       be specified
  3638. ---------------------------------------------
  3639. INT 67 - Virtual Control Program Interface - INSTALLATION CHECK
  3640.     AX = DE00h
  3641. Return: AH = 00h    VCPI is present
  3642.         BH = major version number
  3643.         BL = minor version number
  3644.     AH nonzero  VCPI not present
  3645. ---------------------------------------------
  3646. INT 67 - Virtual Control Program Interface - GET PROTECTED MODE INTERFACE
  3647.     AX = DE01h
  3648.     ES:DI -> 4K page table buffer
  3649.     DS:SI -> three descriptor table entries in GDT
  3650.         first becomes code segment descriptor, other two for use by
  3651.         main control program
  3652. Return: AH = 00h successful
  3653.         DI -> first unused page table entry in buffer
  3654.         EBX -> protected mode entry point in code segment
  3655.     AH = nonzero  failed
  3656. ---------------------------------------------
  3657. INT 67 - Virtual Control Program Interface - GET MAX PHYSICAL MEMORY ADDRESS
  3658.     AX = DE02h
  3659. Return: AH = 00h  successful
  3660.         EDX = physical address of highest 4K memory page
  3661.     AH nonzero: failed
  3662. ---------------------------------------------
  3663. INT 67 - Virtual Control Program Interface - GET NUMBER OF FREE 4K PAGES
  3664.     AX = DE03h
  3665. Return: AH = 00h  successful
  3666.         EDX = number of free 4K pages
  3667.     AH nonzero: failed
  3668. Notes:    returns total number of pages available to ALL tasks in system
  3669.     also available in protected mode by calling the protected-mode VCPI
  3670.     entry point
  3671. ---------------------------------------------
  3672. INT 67 - Virtual Control Program Interface - ALLOCATE A 4K PAGE
  3673.     AX = DE04h
  3674. Return: AH = 00h successful
  3675.         EDX = physical address of allocated page
  3676.     AH nonzero: failed
  3677. Notes:    the client program is responsible for freeing all memory allocated
  3678.     with this call before terminating
  3679.     also available in protected mode by calling the protected-mode VCPI
  3680.     entry point
  3681. ---------------------------------------------
  3682. INT 67 - Virtual Control Program Interface - FREE 4K PAGE
  3683.     AX = DE05h
  3684.     EDX = physical address of 4K page
  3685. Return: AH = 00h successful
  3686.     AH nonzero: failed
  3687. Note:    also available in protected mode by calling the protected-mode VCPI
  3688.     entry point
  3689. ---------------------------------------------
  3690. INT 67 - Virtual Control Program Interface - GET PHYS ADDR OF PAGE IN FIRST MB
  3691.     AX = DE06h
  3692.     CX = page number (linear address shifted right 12 bits)
  3693. Return: AH = 00h successful
  3694.         EDX = physical address of page
  3695.     AH nonzero: invalid page number (AH = 8Bh recommended)
  3696. ---------------------------------------------
  3697. INT 67 - Virtual Control Program Interface - READ CR0
  3698.     AX = DE07h
  3699. Return: AH = 00h
  3700.     EBX = value of Control Register 0
  3701. ---------------------------------------------
  3702. INT 67 - Virtual Control Program Interface - READ DEBUG REGISTERS
  3703.     AX = DE08h
  3704.     ES:DI -> array of 8 DWORDs
  3705. Return: AH = 00h
  3706.     buffer filled with DR0 first, DR7 last, DR4 and DR5 unused
  3707. ---------------------------------------------
  3708. INT 67 - Virtual Control Program Interface - SET DEBUG REGISTERS
  3709.     AX = DE09h
  3710.     ES:DI -> array of 8 DWORDs holding new values of debug registers
  3711. Return: AH = 00h
  3712. Note:   values for DR4 and DR5 ignored
  3713. ---------------------------------------------
  3714. INT 67 - Virtual Control Program Interface - GET 8259 INTERRUPT VECTOR MAPPINGS
  3715.     AX = DE0Ah
  3716. Return: AH = 00h successful
  3717.         BX = first vector used by master 8259 (IRQ0)
  3718.         CX = first vector used by slave 8259 (IRQ8)
  3719.     AH nonzero: failed
  3720. Note:    CX is undefined in systems without a slave 8259
  3721. ---------------------------------------------
  3722. INT 67 - Virtual Control Program Interface - SET 8259 INTERRUPT VECTOR MAPPINGS
  3723.     AX = DE0Bh
  3724.     BX = first vector used by master 8259
  3725.     CX = first vector used by slave 8259
  3726.     interrupts disabled
  3727. Return: AH = 00h successful
  3728.     AH nonzero: failed 
  3729. Notes:    This call merely informs the server that the client has changed the
  3730.     interrupt mappings.  The client may not change the mappings if they
  3731.     have already been changed by the server or another client, and is
  3732.     responsible for restoring the original mappings before terminating.
  3733. ---------------------------------------------
  3734. INT 67 - Virtual Control Program Interface - SWITCH TO PROTECTED MODE
  3735.     AX = DE0Ch
  3736.     ESI = linear address in first megabyte of values for system registers
  3737.     interrupts disabled
  3738. Return: interrupts disabled
  3739.     GDTR, IDTR, LDTR, TR loaded
  3740.     SS:ESP must have at least 16 bytes space, and the entry point is
  3741.         required to set up a new stack before enabling interrupts
  3742.     EAX, ESI, DS, ES, FS, GS destroyed
  3743.  
  3744. Note: in protected mode, calling the protected-mode VCPI entry point with 
  3745.     AX = DE0Ch
  3746.     DS = segment selector from function DE01h
  3747.     SS:ESP in first megabyte of linear memory
  3748.     STACK:    QWORD  return address from FAR call to 32-bit segment
  3749.         DWORD  EIP
  3750.         DWORD  CS
  3751.         DWORD  reserved for EFLAGS
  3752.         DWORD  ESP
  3753.         DWORD  SS
  3754.         DWORD  ES
  3755.         DWORD  DS
  3756.         DWORD  FS
  3757.         DWORD  GS
  3758.     and interrupts disabled, will switch to virtual86 mode with interrupts
  3759.     disabled, all segment registers loaded, and EAX destroyed.
  3760.  
  3761. Format of system register values for switch to protected mode:
  3762. Offset    Size    Description
  3763.  00h    DWORD    value for CR3
  3764.  04h    DWORD    linear address in first megabyte of value for GDTR
  3765.  08h    DWORD    linear address in first megabyte of value for IDTR
  3766.  0Ch    WORD    value for LDTR
  3767.  0Eh    WORD    value for TR
  3768.  10h    PWORD    CS:EIP of protected mode entry-point
  3769. ---------------------------------------------
  3770. INT 68 - APPC/PC
  3771.     AH = 01h
  3772.     DS:DX -> control block
  3773.  
  3774. Format of control block:
  3775. Offset    Size    Description
  3776.  00h 12 BYTEs    reserved
  3777.  0Ch    WORD    verb (action)
  3778.  0Eh  6 BYTEs    0
  3779.  14h    DWORD    (high byte first) return code (see below)
  3780. ---if verb = 1B00h (DISPLAY)---
  3781.  18h    WORD    0
  3782.  1Ah  8 BYTEs    (high byte first) logical unit ID
  3783.  22h  8 BYTEs    (high byte first) partner logical unit name
  3784.  2Ah  8 BYTEs    (high byte first) mode name
  3785.  32h    BYTE    logical unit session limit
  3786.  33h    BYTE    partner logical unit session limit
  3787.  34h    BYTE    mode maximum negotiable session limit
  3788.  35h    BYTE    current session limit
  3789.  36h    BYTE    minimum negotiated winner limit
  3790.  37h    BYTE    maximum negotiated loser limit
  3791.  38h    BYTE    active session count
  3792.  39h    BYTE    active CONWINNER session count
  3793.  3Ah    BYTE    active CONLOSER session count
  3794.  3Bh    BYTE    session termination count
  3795.  3Ch    BYTE    bit 7: SESSION_TERMINATION_TARGET_DRAIN
  3796.         bit 6: SESSION_TERMINATION_SOURCE_DRAIN
  3797. ---if verb=2000h (Attach Physical Unit)---
  3798.  18h    WORD    0
  3799.  1Ah    BYTE    version
  3800.  1Bh    BYTE    release
  3801.  1Ch  8 BYTEs    (high byte first) net name
  3802.  24h  8 BYTEs    (high byte first) physical unit name
  3803.  2Ch  8 BYTEs    0
  3804.  34h    DWORD    pointer to SYSTEM_LOG_EXIT routine, FFFFFFFFh=don't log errors
  3805.  38h    DWORD    0
  3806.  3Ch    BYTE    00h RETURN_CONTROL: COMPLETE
  3807.         01h RETURN_CONTROL: INCOMPLETE
  3808. ---if verb=2100h (Attach Logical Unit)---
  3809.  18h    WORD    70  offset to partner logical unit record
  3810.  1Ah  8 BYTEs    (high byte first) logical unit name
  3811.  22h  8 BYTEs    (high byte first) logical unit ID
  3812.  2Ah    BYTE    logical unit local address
  3813.  2Bh    BYTE    logical unit session limit
  3814.  2Ch    DWORD    pointer to CREATE_TP_EXIT routine,
  3815.         FFFFFFFFh = reject incoming ALLOCATEs
  3816.         00000000h = queue ALLOCATEs
  3817.  30h    DWORD    0
  3818.  34h    DWORD    pointer to SYSTEM_LOG_EXIT routine, FFFFFFFFh=don't log errors
  3819.  38h    DWORD    0
  3820.  3Ch    BYTE    maximum TPs
  3821.  3Dh    BYTE    queue depth
  3822.  3Eh    DWORD    pointer to LU_LU_PASSWORD_EXIT routine, FFFFFFFFh=no pswd exit
  3823.  42h    DWORD    0
  3824.  46h    WORD    total length of partner records
  3825.     for each partner logical unit:
  3826.     WORD  length of this partner logical unit record
  3827.     WORD  42  offset to mode records
  3828.       8 BYTEs (high byte first) partner logical unit name
  3829.     BYTE  partner logical unit security capabilities
  3830.         bit 7: already verified
  3831.         bit 6: conversation level security
  3832.         bit 5: session level security
  3833.     BYTE  partner logical unit session limit
  3834.     WORD  partner logical unit maximum MC_SEND_LL
  3835.       8 BYTEs (high byte first) partner logical unit DLC name
  3836.     BYTE  partner logical unit adapter number
  3837.      17 BYTEs (counted string) partner logical unit adapter address
  3838.     WORD  total length of mode records
  3839.    for each mode:
  3840.     WORD  16  length of this mode record
  3841.       8 BYTEs (high byte first) mode name
  3842.     WORD  RU_SIZE high bound
  3843.     WORD  RU_SIZE low bound
  3844.     BYTE  mode maximum negotiable session limit
  3845.     BYTE  pacing size for receive
  3846. ---if verb=2200h (Detach Logical Unit)---
  3847.  18h  8 BYTEs    (high byte first) logical unit ID
  3848.  20h    BYTE    0
  3849. ---if verb=2700h (Detach Physical Unit)---
  3850.  18h    BYTE    00h  type: hard
  3851.         01h  type: soft
  3852. ---if verb=2B00h (Activate DLC)---
  3853.  18h  8 BYTEs    (high byte first) DLC name
  3854.  20h    BYTE    adapter number
  3855.  
  3856. Values for return code:
  3857.      0000h    successful
  3858.      0001h    BAD_TP_ID
  3859.      0002h    BAD_CONV_ID
  3860.      0003h    bad logical unit ID
  3861.      0008h    no physical unit attached
  3862.      0110h    bad state
  3863.      01B1h    BAD_PART_LUNAME
  3864.      01B2h    bad mode name
  3865.      0201h    physical unit already active
  3866.      0211h    logical unit already active
  3867.      0212h    BAD_PART_SESS
  3868.      0213h    BAD_RU_SIZES
  3869.      0214h    BAD_MODE_SESS
  3870.      0216h    BAD_PACING_CNT
  3871.      0219h    EXTREME_RUS
  3872.      021Ah    SNASVCMG_1
  3873.      0223h    SSCP_CONNECTED_LU
  3874.      0230h    invalid change
  3875.      0243h    too many TPs
  3876.      0272h    adapter close failure
  3877.      0281h    GET_ALLOC_BAD_TYPE
  3878.      0282h    unsuccessful
  3879.      0283h    DLC failure
  3880.      0284h    unrecognized DLC
  3881.      0286h    duplicate DLC
  3882.      0301h    SSCP_PU_SESSION_NOT_ACTIVE
  3883.      0302h    data exceeds RU size
  3884.      0401h    invalid direction
  3885.      0402h    invalid type
  3886.      0403h    segment overlap
  3887.      0404h    invalid first character
  3888.      0405h    table error
  3889.      0406h    conversion error
  3890.      F0010000h    APPC disabled
  3891.      F0020000h    APPC busy
  3892.      F0030000h    APPC abended
  3893.      F0040000h    incomplete
  3894.  
  3895. Routines defined by LU_LU_PASSWORD_EXIT, CREATE_TP_EXIT, and SYSTEM_LOG_EXIT
  3896. pointers are called by pushing the DWORD pointer to the verb on the stack and
  3897. then performing a FAR call.
  3898.  
  3899. Format of ACCESS_LU_LU_PW verb:
  3900. Offset    Size    Description
  3901.  00h 12 BYTEs    reserved
  3902.  0Ch    WORD    1900h
  3903.  0Eh  8 BYTEs    (high byte first) logical unit ID
  3904.  16h  8 BYTEs    (high byte first) logical unit name
  3905.  1Eh  8 BYTEs    (high byte first) partner logical unit name
  3906.  26h 17 BYTEs    (counted string) partner fully qualified logical unit name
  3907.  37h    BYTE    password available (0=no, 1=yes)
  3908.  38h  8 BYTEs    password
  3909.  
  3910. Format of CREATE_TP verb:
  3911. Offset    Size    Description
  3912.  00h 12 BYTEs    reserved
  3913.  0Ch    WORD    2300h
  3914.  0Eh  6 BYTEs    0
  3915.  14h    DWORD    (high byte first) sense code
  3916.         00000000h    Ok
  3917.         080F6051h    SECURITY_NOT_VALID
  3918.         084B6031h    TP_NOT_AVAIL_RETRY
  3919.         084C0000h    TP_NOT_AVAIL_NO_RETRY
  3920.         10086021h    TP_NAME_NOT_RECOGNIZED
  3921.         10086034h    CONVERSATION_TYPE_MISMATCH
  3922.         10086041h    SYNC_LEVEL_NOT_SUPPORTED
  3923.  18h  8 BYTEs    (high byte first) TP ID
  3924.  20h  8 BYTEs    (high byte first) logical unit ID
  3925.  28h    DWORD    (high byte first) conversation ID
  3926.  2Ch    BYTE    0 basic conversation, 1 mapped conversation
  3927.  2Dh    BYTE    0 no sync level, 1 confirm
  3928.  2Eh    BYTE    reserved
  3929.  2Fh 65 BYTEs    (counted string) transaction program name
  3930.  70h  6 BYTEs    0
  3931.  76h    WORD    length of ERROR_LOG_DATA to return
  3932.  78h    DWORD    pointer to ERROR_LOG_DATA buffer
  3933.  7Ch  8 BYTEs    (high byte first) partner logical unit name
  3934.  84h 18 BYTEs    (counted string) partner fully qualified logical unit name
  3935.  96h  8 BYTEs    (high byte first) mode name
  3936.  9Eh 12 BYTEs    0
  3937.  AAh 11 BYTEs    (counted string) password
  3938.  B5h 11 BYTEs    (counted string) user ID
  3939.  C0h    BYTE    0 verification should be performed
  3940.         1 already verified
  3941.  
  3942. Format of SYSLOG verb:
  3943. Offset    Size    Description
  3944.  00h 12 BYTEs    reserved
  3945.  0Ch    WORD    2600h
  3946.  0Eh 10 BYTEs    0
  3947.  18h    WORD    (high byte first) type
  3948.  1Ah    DWORD    (high byte first) subtype
  3949.  1Eh    DWORD    pointer to ADDITIONAL_INFO
  3950.  22h    DWORD    (high byte first) conversation ID
  3951.  26h  8 BYTEs    (high byte first) TP ID
  3952.  2Eh  8 BYTEs    (high byte first) physical unit or logical unit name
  3953.  36h    WORD    length of data
  3954.  38h    DWORD    pointer to data
  3955.  3Ch    BYTE    0
  3956. ---------------------------------------------
  3957. INT 68 - APPC/PC
  3958.     AH = 02h
  3959.     DS:DX -> control block
  3960.  
  3961. Format of control block:
  3962. Offset    Size    Description
  3963.  00h 12 BYTEs    reserved
  3964.  0Ch    WORD    verb (action)
  3965.  0Eh    BYTE    1 if MC_ (mapped conversation) form of verb
  3966.         0 if basic verb
  3967.  0Fh  5 BYTEs    reserved (0)
  3968.  14h    WORD    (high byte first) primary return code (see below)
  3969.  16h    DWORD    (high byte first) error code (see below)
  3970.  1Ah  8 BYTEs    (high byte first) TP_ID
  3971.  22h    DWORD    (high byte first) conversation ID
  3972. ---if verb=0100h (Allocate or MC_Allocate)---
  3973.  26h    BYTE    (MC_Allocate only) 0 basic conversation
  3974.                      1 mapped conversation
  3975.  27h    BYTE    00h SYNC_LEVEL = none
  3976.         01h SYNC_LEVEL = confirm
  3977.  28h    WORD    0000h
  3978.  2Ah    BYTE    00h RETURN_CONTROL: when session allocated
  3979.         01h RETURN_CONTROL: immediate
  3980.         02h RETURN_CONTROL: when session free
  3981.  2Bh  8 BYTEs    0
  3982.  33h  8 BYTEs    (high byte first) partner logical unit name
  3983.  3Bh  8 BYTEs    (high byte first) mode name
  3984.  43h 65 BYTEs    (counted string) TP name
  3985.  84h    BYTE    00h security: none
  3986.         01h security: same
  3987.         02h security: pgm
  3988.  85h 11 BYTEs    0
  3989.  90h 11 BYTEs    (counted string) password
  3990.  9Bh 11 BYTEs    (counted string) user ID
  3991.  A6h    WORD    PIP_DATA length
  3992.  A8h    DWORD    pointer to PIP_DATA
  3993. ---if verb=0300h (Confirm or MC_Confirm)---
  3994.  26h    BYTE  request to send received (0=no, 1=yes)
  3995. ---if verb=0400h (Confirmed or MC_Confirmed), no additional fields---
  3996. ---if verb=0500h (Deallocate or MC_Deallocate)---
  3997.  26h    BYTE    0
  3998.  27h    BYTE    type 0 SYNC_LEVEL
  3999.              1 FLUSH
  4000.              2 ABEND_PROC
  4001.              3 ABEND_SVC
  4002.              4 ABEND_TIMER
  4003.              5 ABEND
  4004.  28h    WORD    (MC_Deallocate only) length of error log data
  4005.  2Ah    DWORD    (MC_Deallocate only) pointer to error log data
  4006. ---if verb=0600h (Flush or MC_Flush), no additional fields---
  4007. ---if verb=0700h (Get_Attributes or MC_Get_Attributes)---
  4008.  26h  8 BYTEs    (high byte first) logical unit ID
  4009.  2Eh    BYTE    0
  4010.  2Fh    BYTE    SYNC_LEVEL (0=none, 1=confirm)
  4011.  30h  8 BYTEs    (high byte first) mode name
  4012.  38h  8 BYTEs    (high byte first) own net name
  4013.  40h  8 BYTEs    (high byte first) own logical unit name
  4014.  48h  8 BYTEs    (high byte first) partner logical unit name
  4015.  50h 18 BYTEs    (counted string) partner's fully qualified logical unit name
  4016.  62h    BYTE    0
  4017.  63h 11 BYTEs    (counted string) user ID
  4018. ---if verb=0800h (Get_Type)---
  4019.  26h    BYTE    type (0=basic conversation, 1=mapped conversation)
  4020. ---if verb=0900h (Post_on_Receipt)---
  4021.  26h    WORD    maximum length
  4022.  28h    BYTE    fill (0=buffer, 1=LL)
  4023. ---if verb=0A00h (Prepare_to_Receive or MC_Prepare_to_Receive)---
  4024.  26h    BYTE    type (0=SYNC_LEVEL, 1=FLUSH)
  4025.  27h    BYTE    locks (0=short, 1=long)
  4026. ---if verb=0B00h (Receive_and_Wait or MC_Receive_and_Wait)---
  4027.  26h    BYTE    what received
  4028.         00h data
  4029.         01h data complete
  4030.         02h data incomplete
  4031.         03h confirm
  4032.         04h confirm send
  4033.         05h confirm deallocate
  4034.         06h send
  4035.  27h    BYTE    (MC_Receive_and_Wait only) fill (0=buffer, 1=LL)
  4036.  28h    BYTE    Request_to_Send_Received (0=no, 1=yes)
  4037.  29h    WORD    maximum length
  4038.  2Bh    WORD    data length
  4039.  2Dh    DWORD    pointer to data
  4040. ---if verb=0C00h (Receive_Immediate or MC_Receive_Immediate)---
  4041.  26h    BYTE    what received
  4042.         00h data
  4043.         01h data complete
  4044.         02h data incomplete
  4045.         03h confirm
  4046.         04h confirm send
  4047.         05h confirm deallocate
  4048.         06h send
  4049.  27h    BYTE    (MC_Receive_Immediate only) fill (0=buffer, 1=LL)
  4050.  28h    BYTE    Request_to_Send_Received (0=no, 1=yes)
  4051.  29h    WORD    maximum length
  4052.  2Bh    WORD    data length
  4053.  2Dh    DWORD    pointer to data
  4054. ---if verb=0E00h (Request_to_Send or MC_Request_to_Send), no other fields---
  4055. ---if verb=0F00h (Send_Data or MC_Send_Data)---
  4056.  26h    BYTE    request to send received (0=no, 1=yes)
  4057.  27h    BYTE    0
  4058.  28h    WORD    data length
  4059.  2Ah    DWORD    pointer to data
  4060. ---if verb=1000h (Send_Error or MC_Send_Error)---
  4061.  26h    BYTE    request to send received (0=no, 1=yes)
  4062.  27h    BYTE    type (0=program, 1=SVC)
  4063.  28h    DWORD    0
  4064.  2Ch    WORD    (MC_Send_Error only) LOG_DATA length
  4065.  2Eh    DWORD    (MC_Send_Error only) pointer to LOG_DATA
  4066. ---if verb=1200h (Test or MC_Test)---
  4067.  26h    BYTE    (MC_Test only) test (0=posted, 1=request_to_send received)
  4068.         Note: error code has different interpretations for:
  4069.             0 posted data
  4070.             1 posted not data (primary return code = 0)
  4071.             1 bad TP_ID (primary return code = 1)
  4072. ---if verb=1300h (Wait)---
  4073.  26h    BYTE    number of conversations to wait on
  4074.         Note: error codes have interpretations as for 1200h above
  4075.  
  4076. Values for primary return code:
  4077.     0000h  successful
  4078.     0001h  parameter check
  4079.     0002h  state check
  4080.     0003h  allocation error
  4081.     0005h  deallocate abended
  4082.     0006h  deallocate abended program
  4083.     0007h  deallocate abended SVC
  4084.     0008h  deallocate abended timer
  4085.     0009h  deallocate normal return
  4086.     000Ah  data posting blocked
  4087.     000Bh  posting not active
  4088.     000Ch  PROG_ERROR_NO_TRUNC
  4089.     000Dh  PROG_ERROR_TRUNC
  4090.     000Eh  PROG_ERROR_PURGING
  4091.     000Fh  CONV_FAILURE_RETRY
  4092.     0010h  CONV_FAILURE_NO_RETRY
  4093.     0011h  SVC_ERROR_NO_TRUNC
  4094.     0012h  SVC_ERROR_TRUNC
  4095.     0013h  SVC_ERROR_PURGING
  4096.     0014h  unsuccessful
  4097.     0018h  CNOS partner logical unit reject
  4098.     0019h  conversation type mixed
  4099.     F001h  APPC disabled
  4100.     F002h  APPC busy
  4101.     F003h  APPC abended
  4102.     F004h  incomplete
  4103.  
  4104. Values for error code:
  4105.     0001h bad TP ID
  4106.     0002h bad conversation ID
  4107.     0004h allocation error, no retry
  4108.     0005h allocation error, retry
  4109.     0006h data area crosses segment boundary
  4110.     0010h bad TPN length
  4111.     0011h bad CONV length
  4112.     0012h bad SYNC level
  4113.     0013h bad security selection
  4114.     0014h bad return control
  4115.     0015h SEC_TOKENS too big
  4116.     0016h PIP_LEN incorrect
  4117.     0017h no use of SNASVCMG
  4118.     0018h unknown partner mode
  4119.     0031h confirm: SYNC_NONE
  4120.     0032h confirm: bad state
  4121.     0033h confirm: NOT_LL_BDY
  4122.     0041h confirmed: bad state
  4123.     0051h deallocate: bad type
  4124.     0052h deallocate: flush bad state
  4125.     0053h deallocate: confirm bad state
  4126.     0055h deallocate: NOT_LL_BDY
  4127.     0057h deallocate: log LL_WRONG
  4128.     0061h flush: not send state
  4129.     0091h post on receipt: invalid length
  4130.     0092h post on receipt: not in receive state
  4131.     0093h post on receipt: bad fill
  4132.     00A1h prepare to receive:invalid type
  4133.     00A2h prepare to receive: unfinished LL
  4134.     00A3h prepare to receive: not in send state
  4135.     00B1h receive and wait: bad state
  4136.     00B2h receive and wait: NOT_LL_BDY
  4137.     00B5h receive and wait: bad fill
  4138.     00C1h receive immediate: not in receive state
  4139.     00C4h receive immediate: bad fill
  4140.     00E1h request to send: not in receive state
  4141.     00F1h send data: bad LL
  4142.     00F2h send data: not in send state
  4143.     0102h send error: log LL wrong
  4144.     0103h send error: bad type
  4145.     0121h test: invalid type
  4146.     0122h test: not in receive state
  4147. ---------------------------------------------
  4148. INT 68 - APPC/PC
  4149.     AH = 03h
  4150.     DS:DX -> control block (see below)
  4151.  
  4152. Format of control block:
  4153. Offset    Size    Description
  4154.  00h 12 BYTEs    reserved
  4155.  0Ch    WORD    verb (action)
  4156.  0Eh  6 BYTEs    0
  4157.  14h    DWORD    (high byte first) return code (see AH=01h)
  4158.  18h    WORD    0
  4159.  1Ah  8 BYTEs    (high byte first) logical unit ID
  4160. ---if verb=2400h (TP Started), control block continues---
  4161.  22h  8 BYTEs    (high byte first) TP ID
  4162. ---if verb=2800h (Get ALLOCATE), control block continues---
  4163.  22h    BYTE    type
  4164.         00h dequeue
  4165.         01h test
  4166.  23h    DWORD    pointer to CREATE_TP record
  4167. ---if verb=2A00h (Change Logical Unit). control block continues---
  4168.  22h    DWORD    pointer to CREATE_TP_EXIT routine
  4169.         FFFFFFFFh reject incoming ALLOCATEs
  4170.         00000000h queue ALLOCATEs
  4171.  26h    DWORD    00000000h
  4172.  2Ah    DWORD    pointer to SYSTEM_LOG_EXIT routine, FFFFFFFFh= don't log errors
  4173.  2Eh    DWORD    00000000h
  4174.  32h    BYTE    maximum TPs
  4175.  33h    BYTE    00h stop QUEUE_ALLOCATEs
  4176.         01h resume QUEUE_ALLOCATEs
  4177.  34h    DWORD    pointer to LU_LU_PASSWORD_EXIT routine, FFFFFFFFh = no exit
  4178.  38h    DWORD    00000000h
  4179. ---------------------------------------------
  4180. INT 68 - APPC/PC
  4181.     AH = 04h
  4182.     DS:DX -> control block (see below)
  4183.  
  4184. Format of control block:
  4185. Offset    Size    Description
  4186.  00h 12 BYTEs    reserved
  4187.  0Ch    WORD    verb (action)
  4188.         2500h TP_ENDED
  4189.         2900h TP_VALID
  4190.  0Eh  6 BYTEs    0
  4191.  14h    DWORD    (high byte first) return code (see AH=01h)
  4192.  18h    WORD    0
  4193.  1Ah  8 BYTEs    (high byte first) TP_ID
  4194.  22h    DWORD -> CREATE_TP record (only if verb = 2900h)
  4195. ---------------------------------------------
  4196. INT 68 - APPC/PC - TRANSFER MSG DATA
  4197.     AH = 05h
  4198.     DS:DX -> control block (see below)
  4199.  
  4200. Format of control block:
  4201. Offset    Size    Description
  4202.  00h 12 BYTEs    reserved
  4203.  0Ch    WORD    1C00h
  4204.  0Eh    BYTE    00h user defined
  4205.         01h NMVT
  4206.         02h alert subvectors
  4207.         03h PDSTATS subvectors
  4208.  0Fh  5 BYTEs    0
  4209.  14h    DWORD    (high byte first) return code (see AH=01h)
  4210.  18h 12 BYTEs    0
  4211.  24h    BYTE    if bit 0 clear, add correlation subvector
  4212.         if bit 1 clear, add product set ID subvector
  4213.         if bit 2 clear, do SYSLOG
  4214.         if bit 3 clear, send SSCP_PU_SESSION
  4215.  25h    BYTE    0
  4216.  26h    WORD    length of data
  4217.  28h  N BYTEs    data
  4218. ---------------------------------------------
  4219. INT 68 - APPC/PC - CHANGE NUMBER OF SESSIONS
  4220.     AH = 06h
  4221.     DS:DX -> control block (see below)
  4222.  
  4223. Format of control block:
  4224. Offset    Size    Description
  4225.  00h 12 BYTEs    reserved
  4226.  0Ch    WORD    1500h
  4227.  0Eh  6 BYTEs    0
  4228.  14h    WORD    (high byte first) primary return code (see AH=02h)
  4229.  16h    DWORD    (high byte first) secondary return code (see below, AH=01h)
  4230.  1Ah  8 BYTEs    (high byte first) logical unit ID
  4231.  22h  8 BYTEs    blanks
  4232.  2Ah  8 BYTEs    (high byte first) partner logical unit name
  4233.  32h  8 BYTEs    (high byte first) mode name
  4234.  3Ah    BYTE    bit 7: use MODE_NAME_SELECT_ALL rather than MODE_NAME
  4235.         bit 6: set negotiable values
  4236.  3Bh    BYTE    partner logical unit mode session limit
  4237.  3Ch    BYTE    minimum CONWINNERS_SOURCE
  4238.  3Dh    BYTE    maximum CONWINNERS_TARGET
  4239.  3Eh    BYTE    automatic activation
  4240.  3Fh    BYTE    0
  4241.  40h    BYTE    bit 7: drain target
  4242.         bit 6: drain source
  4243.         bit 5: target responsible, not source
  4244.  
  4245. Values for secondary return code (see also AH=01h):
  4246.       0000h accepted
  4247.       0001h negotiated
  4248.       0003h bad logical unit ID
  4249.       0004h allocation failure, no retry
  4250.       0005h allocation failure, retry
  4251.       0151h can't raise limits
  4252.       0153h all modes must reset
  4253.       0154h bad SNASVCMG limits
  4254.       0155h minimum greater than total
  4255.       0156h mode closed (prim return code = 1)
  4256.         CNOS mode closed (prim return code = 18h)
  4257.       0157h bad mode name (prim return code = 1)
  4258.         CNOS bad mode name (prim return code = 18h)
  4259.       0159h reset SNA drains
  4260.       015Ah single not SRC response
  4261.       015Bh bad partner logical unit
  4262.       015Ch exceeds maximum allowed
  4263.       015Dh change SRC drains
  4264.       015Eh logical unit detached
  4265.       015Fh CNOS command race reject
  4266. ---------------------------------------------
  4267. INT 68 - APPC/PC - PASSTHROUGH
  4268.     AH = 07h
  4269.     DS:DX -> control block (format depends on application subsystem)
  4270. ---------------------------------------------
  4271. INT 68 - APPC/PC - ENABLE/DISABLE APPC
  4272.     AH = FAh
  4273.     AL bit 0 = 0 enable
  4274.            1 disable
  4275. ---------------------------------------------
  4276. INT 68 - APPC/PC - CONVERT
  4277.     AH = FBh
  4278.     DS:DX -> control block (see below)
  4279.  
  4280. Format of control block:
  4281. Offset    Size    Description
  4282.  00h 12 BYTEs    reserved
  4283.  0Ch    WORD    1A00h
  4284.  0Eh  6 BYTEs    0
  4285.  14h    DWORD    (high byte first) return code
  4286.  18h    BYTE    conversion
  4287.            00h ASCII to EBCDIC
  4288.            01h EBCDIC to ASCII
  4289.  19h    BYTE    character set
  4290.            00h AE
  4291.            01h A
  4292.            02h G
  4293.  1Ah    WORD    length of string to convert
  4294.  1Ch    DWORD    pointer to source
  4295.  20h    DWORD    pointer to target
  4296. ---------------------------------------------
  4297. INT 68 - APPC/PC - ENABLE/DISABLE MESSAGE TRACING
  4298.     AH = FCh
  4299.     AL = 00h disable tracing
  4300.        = 01h enable tracing
  4301.         DX = number of bytes to keep (0=all)
  4302. ---------------------------------------------
  4303. INT 68 - APPC/PC - ENABLE/DISABLE API VERB TRACING
  4304.     AH = FDh
  4305.     AL = 00h disable tracing
  4306.          01h enable tracing
  4307. ---------------------------------------------
  4308. INT 68 - APPC/PC - SET TRACE DESTINATION
  4309.     AH = FEh
  4310.     AL = trace destinations
  4311.         bit 0  storage (DS:DX -> trace stats record)
  4312.         bit 1  display
  4313.         bit 2  file (trace written to file OUTPUT.PC)
  4314.         bit 3  printer
  4315.  
  4316. Format of Trace Statistics Record:
  4317. Offset    Size    Description
  4318.  00h    DWORD    pointer to storage trace buffer
  4319.  04h    WORD    max number of 80-byte records in trace
  4320.  06h    WORD    (high-order byte first!) current record number (must init to 0)
  4321.  08h    DWORD    (high-order byte first!) number of records written (init to 0)
  4322.  0Ch    DWORD    reserved
  4323. Note: do not move record while trace is active
  4324. ---------------------------------------------
  4325. INT 68 - APPC/PC - SET PASSTHROUGH
  4326.     AH = FFh
  4327.     DS:DX -> passthrough exit routine
  4328. ---------------------------------------------
  4329. INT 69 - unused
  4330. ---------------------------------------------
  4331. INT 6A - OPTHELP.COM
  4332. Notes:    OPTHELP is an optionally-resident help system for SLR Systems's OPTASM
  4333.     assembler
  4334.     may be configured to use any interrupt from 60h to 7Fh
  4335. ---------------------------------------------
  4336. INT 6B - unused
  4337. ---------------------------------------------
  4338. INT 6C - system resume vector (CONVERTIBLE)
  4339. ---------------------------------------------
  4340. INT 6C - DOS 3.2 Realtime Clock update
  4341. ---------------------------------------------
  4342. INT 6D - VGA - internal
  4343. Note: used by IBM, Paradise, Video7, and NCR
  4344. ---------------------------------------------
  4345. INT 6E - unused
  4346. ---------------------------------------------
  4347. INT 6F - HP ES-12 EXTENDED BIOS - READ CMOS MEMORY
  4348.     BP = 0012h
  4349.     AH = 22h
  4350.     BL = address of CMOS byte to read
  4351. Return: AH = status
  4352.     AL = byte read
  4353.     BP, DS destroyed
  4354. ---------------------------------------------
  4355. INT 6F - HP ES-12 EXTENDED BIOS - WRITE CMOS MEMORY
  4356.     BP = 0012h
  4357.     AH = 24h
  4358.     BL = address of CMOS byte to write
  4359.     AL = new value
  4360. Return: AH = status
  4361.     BP, DS destroyed
  4362. ---------------------------------------------
  4363. INT 6F - Novell NetWare - PCOX API (3270 PC terminal interface)
  4364. ---------------------------------------------
  4365. INT 6F - 10-NET - LOGIN
  4366.     AH = 00h
  4367.     DS:DX -> login record
  4368.         8 BYTEs user name
  4369.         8 BYTEs password
  4370.            12 BYTEs name of SuperStation
  4371. Return: CL = security level
  4372.     AX = status
  4373.         0000h successful
  4374.         01FFh time out on response
  4375.         02FFh network (hardware) error
  4376.         03FFh invalid password
  4377.         04FFh local rexource not available
  4378.         05FFh server resource not available
  4379.         06FFh already logged in under different name
  4380.         07FFh login security failure (node)
  4381.         08FFh not logged in
  4382.         09FFh position calc error
  4383.         0AFFh receive subfunction not = send subfunction (i.e. read, write)
  4384.         0BFFh request function not in range
  4385.         0CFFh no more server file handle entries left
  4386.         0DFFh no more shared file table entries left
  4387.         0EFFh no more user file handle entries left
  4388.         0FFFh chat permit not on
  4389.         10FFh not a server on request
  4390.         11FFh no transporter board error
  4391.         12FFh time out on send
  4392.         13FFh item not found (spool item not on queue)
  4393.         14FFh dos access incompatible
  4394.         15FFh record already locked
  4395.         16FFh invalid parameter
  4396.         17FFh record lock time out error
  4397.         18FFh currently spooling to named device
  4398.         19FFh dropped receive message (throttle)
  4399.         1AFFh open sharing violation
  4400.         1BFFh no more tuf entries left
  4401.         1CFFh not file owner on open
  4402.         1DFFh read security not passed
  4403.         1EFFh write security not passed
  4404.         1FFFh group security not passed
  4405.         20FFh security file failure
  4406.         21FFh activity file failure
  4407.         22FFh spool cntrl file failure
  4408.         23FFh device not mounted (spooling)
  4409.         24FFh spool file has not been terminated
  4410.         25FFh device not mounted or is not being shared
  4411.         26FFh duplicate node id
  4412.         27FFh file not found error
  4413.         28FFh no more files
  4414.         29FFh unknown internal system error
  4415.         2AFFh print queue is full or corrupted
  4416.         2BFFh invalid function
  4417.         2CFFh invalid handle
  4418.         2DFFh too many files opened
  4419.         2EFFh path not found
  4420.         2FFFh named file is active
  4421. /* I've gotten one submission which says FFxxh, and another with xxFFh */
  4422. /* I don't know which way around these should be, does somebody else know? */
  4423.         FF01h timeout
  4424.         FF02h network error
  4425.         FF03h invalid password
  4426.         FF04h no local buffer
  4427.         FF05h superstation not available
  4428.         FF06h node already logged in
  4429.         FF07h login not valid from this node
  4430.         FF08h node ID already in use
  4431.         FF16h invalid parameter (bad length, invalid node ID, etc)
  4432.         FF17h record locked by another user
  4433.         FF18h sent message has been dropped
  4434. ---------------------------------------------
  4435. INT 6F - 10-NET - LOGOFF
  4436.     AH = 01h
  4437.     DS:DX -> superstation ID or nulls (12 bytes)
  4438. Return: CX = number of files closed
  4439.     AX = status (see AH=00h)
  4440.         FF08h superstation ID not already logged in
  4441. ---------------------------------------------
  4442. INT 6F - 10-NET - STATUS OF NODE
  4443.     AH = 02h
  4444.     DS:DX -> 512-byte status record (see below)
  4445. Return: CF set on error
  4446.         AX = error code (see AH=00h)
  4447.  
  4448. Format of node status record:
  4449. Offset    Size    Description
  4450.  00h  8 BYTEs    user name (0 if none)
  4451.  08h    BYTE    station type
  4452.            00h workstation
  4453.            01h superstation
  4454.            02h gateway station
  4455.            03h gateway active
  4456.            04h logged into multiple superstations
  4457.            05h reserved
  4458.  09h 24 BYTEs    list of superstations logged into more than one superstation
  4459.  21h 12 BYTEs    node ID
  4460.  2Dh    WORD    message count for this station (send for user node, receive for
  4461.         superstations)
  4462. ---for superstations only---
  4463.  2Fh    WORD    drives allocated (bit 0=A:, bit 1=B:,...)
  4464.  31h    BYTE    user service flag
  4465.         bit 7: gate
  4466.             6: print permit on
  4467.             4: SUBMIT is on
  4468.             3: mail waiting for node
  4469.             2: calendar waiting for you
  4470.             1: news waiting for you
  4471.             0: mail waiting for you
  4472.  32h    BYTE    printers allocated (bit 0=LPT1,...)
  4473.  33h    BYTE    number of unprinted spool files
  4474.  34h    BYTE    number of opened files
  4475.  35h    BYTE    number of logged on nodes
  4476.  36h    BYTE    primary drive (1=A:)
  4477.  37h    BYTE    reserved
  4478.  38h  N BYTEs    list of logged on node IDs (each 12 bytes, max 37 IDs)
  4479. 1F4h  3 BYTEs    time: sec/min/hrs
  4480. 1F7h  3 BYTEs    date: day/mon/year-1980
  4481. ---------------------------------------------
  4482. INT 6F - 10-NET - GET ADDRESS OF CONFIGURATION TABLE
  4483.     AH = 03h
  4484.     DS:DI -> node ID (optional)
  4485. Return: ES:BX -> configuration table 
  4486.  
  4487. Format of configuration table:
  4488. Offset    Size    Description
  4489. -41    WORD    local device table address
  4490. -39    WORD    extended network error mapping table address
  4491. -37    WORD    shared device table address
  4492. -35    WORD    mounted device table address
  4493. -33    BYTE    receive buffer counter
  4494. -32    BYTE    collect buffer counter
  4495. -31    WORD    TUF address
  4496. -29    BYTE    enable flag
  4497. -28    BYTE    FCB keep flag
  4498. -27    WORD    reserved
  4499. ---up to here, 10-Net v3.3---
  4500. -25    WORD    count of dropped Send6F
  4501. -23    WORD    buffer start address
  4502. -21    WORD    comm driver base address
  4503. -19    WORD    send/receive retry count
  4504. -17    BYTE    number of 550ms loops before timeout
  4505. -16    WORD    UFH address
  4506. -14    WORD    CDIR address
  4507. -12    WORD    LTAB address
  4508. -10    WORD    SFH address
  4509. -8    WORD    FTAB address
  4510. -6    WORD    RLTAB address
  4511. -4    WORD    SMI address
  4512. -2    WORD    NTAB address
  4513.  00h    WORD    address of first CT_DRV
  4514.  02h    BYTE    number of DRV entries
  4515.  03h  8 BYTEs    login name
  4516.  0Bh 12 BYTEs    node ID (blank-padded)
  4517.  17h  6 BYTEs    node address
  4518.  1Dh    BYTE    flag
  4519.  1Eh    BYTE    CT_CFLG (chat permit)
  4520.         bit 1: sound bell
  4521.         bit 0: CHAT permit
  4522.  1Fh    BYTE    CT_PSFLG
  4523.         bit 5: PRINT permit
  4524.         bit 4: KB initiated
  4525.         bit 3: CHAT called FOXPTRM
  4526.         bit 2: SUBMIT active
  4527.         bit 1: SUBMIT received
  4528.         bit 0: SUBMIT permit
  4529.  20h    BYTE    in 10Net flag
  4530.  21h    WORD    receive message count
  4531.  23h    WORD    send message count
  4532.  25h    WORD    retry count
  4533.  27h    WORD    failed count
  4534.  29h    WORD    driver errors
  4535.  2Bh    WORD    dropped responses/CHATs
  4536.  2Dh  9 BYTEs    LIST ID/NTAB address (3 entries--LPT1-3)
  4537.  36h  6 BYTEs    AUX ID/NTAB address (2 entries--COM1-2)
  4538.  3Ch    BYTE    active CB channel
  4539.  3Dh    BYTE    received 6F messages on queue
  4540.  3Eh  9 BYTEs    activity counters for channels 1-9
  4541. ---beyond here, 10-Net v3.3---
  4542.  47h    BYTE    bit 0 = RS232 gate
  4543.             1 = Send6F gate (user set)
  4544.  48h    DWORD    pointer into gate (user set)
  4545.  4Ch    DWORD    pointer into 10Net send
  4546.  50h  N WORDs    addresses of timer blocks
  4547. ---------------------------------------------
  4548. INT 6F - 10-NET - SEND
  4549.     AH = 04h
  4550.     DS:BX -> record
  4551.         12 BYTEs receiving node's ID
  4552.             if first byte has high-order bit set, message is
  4553.                directed to the CT_RGATE vector at the receiver
  4554.             if second byte is 00h, first byte is taken as a CB
  4555.                channel number and delivered to all nodes on same
  4556.                channel
  4557.            WORD  length of data at DX
  4558.     DS:DX -> data (max 1024 bytes)
  4559. Return: CF set on error
  4560.         AX = error code (see AH=00h)
  4561. ---------------------------------------------
  4562. INT 6F - 10-NET - RECEIVE
  4563.     AH = 05h
  4564.     CX = number of seconds before timeout
  4565.     DS:DX -> receive buffer (see below)
  4566. Return: CF set on error
  4567.         AX = error code (see AH=00h)
  4568.     CF clear if successful
  4569.         AH = FEh if dequeued message is a CB message
  4570.  
  4571. Format of receive buffer:
  4572. Offset    Size    Description
  4573.  00h 12 BYTEs    sending node's ID
  4574.  0Ch    WORD    length of message
  4575.  0Eh  N BYTEs    message (maximum 1024 bytes)
  4576. ---------------------------------------------
  4577. INT 6F - 10-NET - LOCK HANDLE
  4578.     AH = 07h
  4579.     BX = file handle
  4580.     CX:DX = starting offset in file
  4581.     SI = record length
  4582. Return: CF set on error
  4583.         AX = error code (see also AH=00h)
  4584.         0002h file not found
  4585. ---------------------------------------------
  4586. INT 6F - 10-NET - UNLOCK HANDLE
  4587.     AH = 08h
  4588.     BX = file handle
  4589.     AL = mode
  4590.         00h unlock all
  4591.         01h unlock record at CX:DX
  4592. Return: CF set on error
  4593.         AX = error code (see also AH=00h)
  4594.         0002h file not found
  4595. ---------------------------------------------
  4596. INT 6F - 10-NET - SUBMIT
  4597.     AH = 09h
  4598.     DS:BX -> submit record (see below)
  4599.  
  4600. Format of submit record:
  4601. Offset    Size    Description
  4602.  00h 12 BYTEs    destination node ID (must be logged in)
  4603.  0Ch    WORD    length+2 of following 'command line' text
  4604.  0Eh  N BYTEs    command line text (<=100 bytes), system adds CR
  4605. ---------------------------------------------
  4606. INT 6F - 10-NET - CHAT
  4607.     AH = 0Ah
  4608.     DS:BX -> control parameters (see below)
  4609.     DS:DX -> chat message (see below)
  4610.  
  4611. Format of control parameters:
  4612. Offset    Size    Description
  4613.  00h  8 BYTEs    sender ID, defaults to node's userID if nulls
  4614.  08h  8 BYTEs    destination user ID, 'EVERYONE' may be used
  4615.  10h 12 BYTEs    destination node ID
  4616.  
  4617. Format of chat message:
  4618. Offset    Size    Description
  4619.  00h    WORD    length+2 of following text
  4620.  02h  N BYTEs    text, max 101 bytes
  4621. ---------------------------------------------
  4622. INT 6F - 10-NET - LOCK SEMAPHORE, RETURN IMMEDIATELY
  4623.     AH = 0Bh
  4624.     AL = drive number or 0
  4625.     ES:SI = Ethernet address or 0
  4626.     DS:BX -> 31-byte ASCIZ semaphore name
  4627. Return: AL = status
  4628.         00h successful
  4629.         01h semaphore currently locked
  4630.         02h server not responding
  4631.         03h invalid semaphore name
  4632.         04h semaphore list is full
  4633.         05h invalid drive ID
  4634.         06h invalid Ethernet address
  4635.         07h not logged in
  4636.         08h write to network failed
  4637.         09h semaphore already logged in this CPU
  4638. Note: same as INT 60/AH=12h
  4639. ---------------------------------------------
  4640. INT 6F - 10-NET - UNLOCK SEMAPHORE
  4641.     AH = 0Ch
  4642.     AL = drive number or 0
  4643.     ES:SI = Ethernet address or 0
  4644.     DS:BX -> 31-byte ASCIZ semaphore name
  4645. Return: AL = status (see also AH=0Bh)
  4646.         01h semaphore not locked
  4647. Note: same as INT 60/AH=13h
  4648. ---------------------------------------------
  4649. INT 6F - 10-NET - WHO
  4650.     AH = 0Dh
  4651.     AL = type code
  4652.         01h return superstations only
  4653.         02h return non-superstations only
  4654.         otherwise return all
  4655.     CX = length of data
  4656.     DS:DX -> array of records to be filled (see below)
  4657. Return: CL = number of records returned (responding stations)
  4658.  
  4659. Format of station record:
  4660. Offset    Size    Description
  4661.  00h 12 BYTEs    node ID
  4662.  0Ch    BYTE    flags
  4663.         bit 1 = workstation
  4664.             2 = superstation
  4665.             3 = xgate
  4666.             4 = active gate
  4667. ---if AL = 01h---
  4668.  0Dh    BYTE    version number
  4669.     WORD    level number of 10Net software in responding node
  4670. ---if AL = 02h---
  4671.  0Dh  8 BYTEs    user ID
  4672.  15h    BYTE    version number
  4673.  16h    WORD    level number
  4674. ---------------------------------------------
  4675. INT 6F - 10-NET - SPOOL/PRINT
  4676.     AH = 0Eh
  4677.     DS:DX -> spool/print record (see below)
  4678. Return: CF set on error
  4679.         AX = error code (see also AH=00h)
  4680.         FF17h device not mounted
  4681.         FF18h already spooling to named device
  4682.  
  4683. Format of Spool/Print record:
  4684. Offset    Size    Description
  4685.  00h    WORD    operation code
  4686.            00h initiate spool
  4687.            01h abort print
  4688.            02h close spool
  4689.            03h delete spool
  4690.            04h print
  4691.            05h get report info
  4692.            06h set chat template
  4693.            07h queue
  4694.            08h return queue
  4695.            09h queue non-spooled file for printing
  4696.  02h 11 BYTEs    file name in FCB format
  4697. ---if operation code = 00h or 06h---
  4698.  0Dh    BYTE    notification
  4699.         bit 7: queue to top
  4700.         bit 6: do ID page
  4701.         bit 5: no form feed
  4702.         bit 4: reserved
  4703.         bit 3: explicity queuing only
  4704.         bit 2: notify at print completion
  4705.         bit 1: notify server operator/reply
  4706.         bit 0: notify at print start
  4707.  0Eh    BYTE    days to keep (FFh=forever)
  4708.  0Fh    BYTE    bits 0,1: device (1=LPT1)
  4709.         bits 4-7: remote drive to store spool file (1=A,...)
  4710.  10h    WORD    length of following data area
  4711.  12h  N BYTEs    up to 64 bytes of description
  4712. ---if operation code = 03h---
  4713.  0Dh  8 BYTEs    user ID to associate with filename
  4714. ---if operation code = 04h---
  4715.  0Dh    WORD    block number
  4716.  0Fh  8 BYTEs    user ID to associate with filename
  4717. ---if operation code = 05h---
  4718.  0Dh    BYTE    RRN to start retrieve
  4719.  0Eh    BYTE    bits 0,1: local print device (LPTx)
  4720.         bit 3: if set, return entries for all users
  4721.  0Fh    WORD    length of following area
  4722.  11h  N BYTEs    up to 1500 bytes to receive $SCNTL records returned
  4723. ---if operation code = 07h---
  4724.  0Dh    BYTE    queue number
  4725.  0Eh    BYTE    bits 0,1: local print device (LPTx)
  4726.  0Fh    WORD    number of bytes of test print to be done
  4727.  11h    BYTE    code: 01h print device
  4728.               02h test print count
  4729.               03h prn
  4730. ---if operation code = 08h---
  4731.  0Dh    BYTE    queue location or $SCNTL location to start access
  4732.             returns next item for access:
  4733.                 00h-7Fh queued items
  4734.                 80h-FEh non-queued, non-printed items
  4735.                 FFh    no more items
  4736.  0Eh    WORD    unused
  4737.  10h    WORD    length of following area
  4738.  12h  N BYTEs    up to 64 bytes to receive $SCNTL records
  4739. ---if operation code = 09h---
  4740.  0Dh  3 BYTEs    unused
  4741.  10h  N BYTEs    path to non-spooled file to be queued for printing
  4742.  
  4743. Format of $SCNTL record:
  4744. Offset    Size    Description
  4745.  00h  8 BYTEs    user ID
  4746.  08h 11 BYTEs    filename in FCB format
  4747.  13h  6 BYTEs    node ID
  4748.  19h  3 BYTEs    creation date
  4749.  1Ch    BYTE    flags
  4750.         bit 7: queue to top
  4751.             6: do ID page
  4752.             5: no form feed at end
  4753.             4: reserved
  4754.             3: explicit queueing only
  4755.             2: notify at completion
  4756.             1: notify server operator/reply
  4757.             0: notify at start
  4758.  1Dh    BYTE    retention time in days
  4759.  1Eh    BYTE    printing device (LPTx)
  4760.  1Fh  3 BYTEs    date last printed (0 = never)
  4761.  22h    BYTE    device containing spoolfile
  4762.  23h    WORD    bytes to print for test print
  4763.  25h    WORD    block number to start print
  4764.  27h    BYTE    reserved
  4765. ---------------------------------------------
  4766. INT 6F - 10-NET - ATTACH/DETACH PRINTER
  4767.     AH = 10h
  4768.     AL = subfunction
  4769.         00h initiate spooling if LPT1 is mounted
  4770.         01h terminate spooling if LPT1 is mounted
  4771. ---------------------------------------------
  4772. INT 6F - 10-NET - LOCK FCB
  4773.     AH = 11h
  4774.     AL = mode
  4775.         01h sequential
  4776.         02h random
  4777.         03h random block
  4778.         CX = number of records
  4779.     DS:DX -> FCB
  4780. Return: CF set on error
  4781.         AX = error code (see also AH=00h)
  4782.         2 file not found
  4783. ---------------------------------------------
  4784. INT 6F - 10-NET - UNLOCK FCB
  4785.     AH = 12h
  4786.     AL = mode
  4787.         00h sequential
  4788.         01h random
  4789.         02h random block
  4790.         CX = number of records
  4791.     DS:DX -> FCB
  4792. Return: CF set on error
  4793.         AX = error code (see also AH=00h)
  4794.         2 file not found
  4795. ---------------------------------------------
  4796. INT 6F - 10-NET v3.3 - GET REMOTE CONFIGURATION TABLE ADDRESS
  4797.     AH = 13h
  4798.     DS:DX -> node ID, 12 bytes blank-padded
  4799. Return: CF set on error
  4800.         AX = error code (see AH=00h)
  4801.     CF clear if successful
  4802.         ES:BX = configuration table address on given machine
  4803. ---------------------------------------------
  4804. INT 6F - 10-NET v3.3 - GET REMOTE MEMORY
  4805.     AH = 14h
  4806.     BX:SI = address of remote memory
  4807.     CX = length (<=1024 bytes)
  4808.     DS:DX -> node ID, 12 bytes blank-padded
  4809.     DS:DI -> area to receive remote memory image
  4810. Return: CF set on error
  4811.         AX = error code (see AH=00h)
  4812.     CF clear if successful
  4813.         CX = amount of memory copied to DS:SI
  4814. ---------------------------------------------
  4815. INT 6F - 10-NET v3.3 - GET SHARED DEVICE ENTRY
  4816.     AX = 1501h
  4817.     BX = zero-based index
  4818.     DS:SI -> node ID, 12 bytes blank-padded
  4819.     ES:DI -> 85-byte buffer for shared device table entry (see below)
  4820. Return: CF set on error
  4821.         AX = error code (see AH=00h)
  4822.     CF clear if successful
  4823.         ES:DI buffer contains shared device table entry of BXth device:
  4824.  
  4825. Format of shared device table entry:
  4826. Offset    Size    Description
  4827.  00h  8 BYTEs    device
  4828.  08h  8 BYTEs    alias
  4829.  10h 64 BYTEs    path
  4830.  50h  8 BYTEs    password
  4831.  58h    BYTE    access
  4832.  59h  4 BYTEs    mask
  4833. ---------------------------------------------
  4834. INT 6F - 10-NET v3.3 - SET SHARED DEVICE ENTRY
  4835.     AX = 1502h
  4836.     DS:SI -> node ID, 12 bytes blank-padded
  4837.     ES:DI -> valid shared device table entry
  4838. Return: CF set on error
  4839.         AX = error code (see AH=00h)
  4840. ---------------------------------------------
  4841. INT 6F - 10-NET v3.3 - DELETE SHARED DEVICE ENTRY
  4842.     AX = 1503h
  4843.     BX = zero-based index
  4844.     DS:SI -> node ID, 12 bytes blank-padded
  4845. Return: CF set on error
  4846.         AX = error code (see AH=00h)
  4847. ---------------------------------------------
  4848. INT 6F - 10-NET v3.3 - MOUNT
  4849.     AH = 17h
  4850.     AL = local drive number (0=A:)
  4851.     BL = remote drive letter or '1'..'3' for LPTn or '4' or '5' for COMx
  4852.     DS:DX -> node ID, 12 bytes blank-padded
  4853. Return: CF set on error
  4854.         AX = error code (see AH=00h)
  4855. ---------------------------------------------
  4856. INT 6F - 10-NET v3.3 - UNMOUNT
  4857.     AH = 18h
  4858.     AL = local drive number (0=A:)
  4859.     BL = type
  4860.         00h        disk
  4861.         01h-03h LPTn
  4862.         04h,05h COMx
  4863. Return: CF set on error
  4864.         AX = error code (see AH=00h)
  4865. ---------------------------------------------
  4866. INT 70 - IRQ8 - AT/XT286/PS50+ - REAL-TIME CLOCK
  4867. ---------------------------------------------
  4868. INT 71 - IRQ9 - AT/XT286/PS50+ - LAN ADAPTER 1
  4869.    rerouted to INT 0A by BIOS
  4870. ---------------------------------------------
  4871. INT 72 - IRQ10 - AT/XT286/PS50+ - RESERVED
  4872. ---------------------------------------------
  4873. INT 73 - IRQ11 - AT/XT286/PS50+ - RESERVED
  4874. ---------------------------------------------
  4875. INT 74 - IRQ12 - PS50+ - MOUSE INTERRUPT
  4876. ---------------------------------------------
  4877. INT 75 - IRQ13 - AT/XT286/PS50+ - 80287 ERROR
  4878.    rerouted to INT 02 by BIOS
  4879. ---------------------------------------------
  4880. INT 76 - IRQ14 - AT/XT286/PS50+ - FIXED DISK
  4881. ---------------------------------------------
  4882. INT 77 - IRQ15 - AT/XT286/PS50+ - RESERVED
  4883. ---------------------------------------------
  4884. INT 78 - not used
  4885. ---------------------------------------------
  4886. INT 79 - not used
  4887. ---------------------------------------------
  4888. INT 7A - Novell NetWare - LOW-LEVEL API
  4889. ---------------------------------------------
  4890. INT 7A - AutoCAD Device Interface
  4891. ---------------------------------------------
  4892. INT 7B - Btrieve API
  4893.     ??? = function
  4894.         00h open
  4895.         01h close
  4896.         02h insert
  4897.         03h update
  4898.         04h delete
  4899.         05h get_equal
  4900.         06h get_next
  4901.         07h get_prev
  4902.         08h get_greater
  4903.         09h get_gr_eql
  4904.         0Ah get_less
  4905.         0Bh get_less_eq
  4906.         0Ch get_first
  4907.         0Dh get_last
  4908.         0Eh create
  4909.         0Fh stat
  4910.         10h extend
  4911.         11h set_dir: set directory information
  4912.         12h get_dir: get directory information
  4913.         13h begin_trans
  4914.         14h end_trans
  4915.         15h abort_trans
  4916.         16h get_pos: get record position number
  4917.         17h get_direct: get data by sending record position
  4918.         18h step_direct
  4919.         19h stop
  4920.         1Ah version
  4921.         1Bh unlock
  4922.         1Ch reset
  4923. Return: ???
  4924. Note:    Btrieve sets low byte of vector to 33h; this serves as the installation
  4925.     check
  4926. ---------------------------------------------
  4927. INT 7C - not used
  4928. ---------------------------------------------
  4929. INT 7D - not used
  4930. ---------------------------------------------
  4931. INT 7E - not used
  4932. ---------------------------------------------
  4933. INT 7F - HDILOAD.EXE - 8514/A VIDEO CONTROLLER INTERFACE
  4934.     ???
  4935. ---------------------------------------------
  4936. INT 7F - HLLAPI (High-Level Language API)
  4937.     ??? -> parameter control block
  4938. Return: ???
  4939.  
  4940. Format of parameter control block:
  4941. Offset    Size    Description
  4942.  00h  3 BYTEs    signature = 'PCB'
  4943.  03h    BYTE    function number
  4944.  04h    WORD    segment of control string
  4945.  06h    WORD    offset of control string
  4946.  08h    WORD    length of control string, unless explicit end-of-str char set
  4947.  0Ah    BYTE    unused
  4948.  0Bh    WORD    return code
  4949.  0Dh    WORD    maximum length of control string
  4950.  
  4951. Functions:
  4952.  00h    Query system (Attachmate implementation only)
  4953.  01h    Connect presentation space
  4954.  02h    Disconnect presentation space
  4955.  03h    Send string of keystrokes as if typed from keyboard
  4956.  04h    Wait ~60s, returns status of presentation space
  4957.  05h    Copy current presentation space into a user-defined buffer
  4958.  06h    Search presentation space for first occurrence of a specified string
  4959.  07h    Query cursor location in current presentation space
  4960.  08h    Copy part or all of current presentation space into user buffer
  4961.  09h    Set session parameters; parameters vary by vendor
  4962.  0Ah    Get info on sessions currently connected
  4963.  0Bh    Lock current presentation space
  4964.  0Ch    Unlock previously locked presentation space
  4965.  0Dh    Return copy of operator info area (OIA) of current presentation space
  4966.  0Eh    get attribute byte for given position in the current presentation space
  4967.  0Fh    copy string of characters to the current presentation space
  4968.  10h    workstation control functions
  4969.  11h    storage manager functions, intended primarily for BASIC applications
  4970.  12h    set delay period in half-second intervals
  4971.  14h    get info on level of workstation support used
  4972.  15h    reset session parameters to default values
  4973.  16h    get detailed info on the current session
  4974.  17h    start host notification to application on presentation sp or OIA update
  4975.  18h    check host update when host notification enabled
  4976.  19h    stop host notification
  4977.  1Eh    search field within current presentation space for string
  4978.  1Fh    get first positionof a selected field in the current presentation space
  4979.  20h    get length of specified field
  4980.  21h    copy string into a specified field
  4981.  22h    copy specified field into a user-defined buffer
  4982.  23h    create alternate presentation space (IBM only), don't use with BASIC
  4983.  24h    switch to alternate presentation space (IBM only), not with BASIC
  4984.  25h    display cursor in specified area (IBM only), don't use with BASIC
  4985.  26h    display alternate presentation space (IBM only), don't use with BASIC
  4986.  27h    delete alternate presentation space (IBM only), don't use with BASIC
  4987.  32h    start intercepting keystrokes to allow filtering
  4988.  33h    get keystrokes after turning on interception
  4989.  34h    notify operator when keystroke rejected by filter subroutine
  4990.  35h    stop intercepting keystrokes
  4991.  5Ah    send file
  4992.  5Bh    receive file
  4993.  5Ch    run a program
  4994.  5Dh    execute DOS command
  4995.  63h    change presentation space position to PC display row/col or vice versa
  4996.  FFh    Get info on DCA implementation
  4997.  
  4998. Session Parameters for function 09h:
  4999.  ATTRIB        return attributes in hex
  5000.  NOATTRIB    return attributes as blanks
  5001.  CONPHYS    make physical connection
  5002.  CONLOG        only make logical connection
  5003.  EAB        copy extended attribute bytes along with data 
  5004.  NOEAB        copy data only
  5005.  ESC=n        set escape character to "n" (default '@')
  5006.  EOT=n        set end of string character (default 00h)
  5007.  FPAUSE        full-duration pause
  5008.  IPAUSE        interruptible pause
  5009.  STRLEN        use explicit string lengths
  5010.  STREOT        use terminated strings
  5011.  SRCHALL    search entire presentation space
  5012.  SRCHFROM    search from specified offset
  5013.  SRCHFRWD    search forward from position 1
  5014.  SRCHBKWD    search backward from last position in presentation space
  5015.  TWAIT        wait specified time for keyboard ready
  5016.  LWAIT        wait until keyboard ready
  5017.  NWAIT        no wait
  5018.  TRON        enable tracing
  5019.  TROFF        disable tracing
  5020.  AUTORESET    send reset before sending keys with function 03h
  5021.  NORESET    don't send reset
  5022.  QUIET        don't display messages sent with INT 21/AH=9
  5023.  NOQUIET    allow messages to be displayed
  5024.  TIMEOUT=n    set timeout in 30-second intervals, 0 = wait until ^Break
  5025.  XLATE        translate extended attribute bytes
  5026.  NOXLATE    don't translate
  5027.  NEWRET        use HLLAPI v3.0 return code conventions
  5028.  OLDRET        use HLLAPI v2.0 return code conventions
  5029. ---------------------------------------------
  5030. INT 80 - reserved for BASIC
  5031. ---------------------------------------------
  5032. INT 81 - reserved for BASIC
  5033. ---------------------------------------------
  5034. INT 82 - reserved for BASIC
  5035. ---------------------------------------------
  5036. INT 83 - reserved for BASIC
  5037. ---------------------------------------------
  5038. INT 84 - reserved for BASIC
  5039. ---------------------------------------------
  5040. INT 85 - reserved for BASIC
  5041. ---------------------------------------------
  5042. INT 86 - Relocated (by NETBIOS) INT 18
  5043. ---------------------------------------------
  5044. INT 86 - used by BASIC while in interpreter
  5045. ---------------------------------------------
  5046. INT 87 - used by BASIC while in interpreter
  5047. ---------------------------------------------
  5048. INT 88 - used by BASIC while in interpreter
  5049. ---------------------------------------------
  5050. INT 89 - used by BASIC while in interpreter
  5051. ---------------------------------------------
  5052. INT 8A - used by BASIC while in interpreter
  5053. ---------------------------------------------
  5054. INT 8B - used by BASIC while in interpreter
  5055. ---------------------------------------------
  5056. INT 8C - used by BASIC while in interpreter
  5057. ---------------------------------------------
  5058. INT 8D - used by BASIC while in interpreter
  5059. ---------------------------------------------
  5060. INT 8E - used by BASIC while in interpreter
  5061. ---------------------------------------------
  5062. INT 8F - used by BASIC while in interpreter
  5063. ---------------------------------------------
  5064. INT 90 - used by BASIC while in interpreter
  5065. ---------------------------------------------
  5066. INT 91 - used by BASIC while in interpreter
  5067. ---------------------------------------------
  5068. INT 92 - used by BASIC while in interpreter
  5069. ---------------------------------------------
  5070. INT 93 - used by BASIC while in interpreter
  5071. ---------------------------------------------
  5072. INT 94 - used by BASIC while in interpreter
  5073. ---------------------------------------------
  5074. INT 95 - used by BASIC while in interpreter
  5075. ---------------------------------------------
  5076. INT 96 - used by BASIC while in interpreter
  5077. ---------------------------------------------
  5078. INT 97 - used by BASIC while in interpreter
  5079. ---------------------------------------------
  5080. INT 98 - used by BASIC while in interpreter
  5081. ---------------------------------------------
  5082. INT 99 - used by BASIC while in interpreter
  5083. ---------------------------------------------
  5084. INT 9A - used by BASIC while in interpreter
  5085. ---------------------------------------------
  5086. INT 9B - used by BASIC while in interpreter
  5087. ---------------------------------------------
  5088. INT 9C - used by BASIC while in interpreter
  5089. ---------------------------------------------
  5090. INT 9D - used by BASIC while in interpreter
  5091. ---------------------------------------------
  5092. INT 9E - used by BASIC while in interpreter
  5093. ---------------------------------------------
  5094. INT 9F - used by BASIC while in interpreter
  5095. ---------------------------------------------
  5096. INT A0 - used by BASIC while in interpreter
  5097. ---------------------------------------------
  5098. INT A1 - used by BASIC while in interpreter
  5099. ---------------------------------------------
  5100. INT A2 - used by BASIC while in interpreter
  5101. ---------------------------------------------
  5102. INT A3 - used by BASIC while in interpreter
  5103. ---------------------------------------------
  5104. INT A4 - used by BASIC while in interpreter
  5105. ---------------------------------------------
  5106. INT A4 - Right Hand Man API
  5107.     function number in AH
  5108. Note: Right-Hand Man is a TSR desk-top utility, and only hooks this interrupt
  5109.     while popped up
  5110. ---------------------------------------------
  5111. INT A5 - used by BASIC while in interpreter
  5112. ---------------------------------------------
  5113. INT A6 - used by BASIC while in interpreter
  5114. ---------------------------------------------
  5115. INT A7 - used by BASIC while in interpreter
  5116. ---------------------------------------------
  5117. INT A8 - used by BASIC while in interpreter
  5118. ---------------------------------------------
  5119. INT A9 - used by BASIC while in interpreter
  5120. ---------------------------------------------
  5121. INT AA - used by BASIC while in interpreter
  5122. ---------------------------------------------
  5123. INT AB - used by BASIC while in interpreter
  5124. ---------------------------------------------
  5125. INT AC - used by BASIC while in interpreter
  5126. ---------------------------------------------
  5127. INT AD - used by BASIC while in interpreter
  5128. ---------------------------------------------
  5129. INT AE - used by BASIC while in interpreter
  5130. ---------------------------------------------
  5131. INT AF - used by BASIC while in interpreter
  5132. ---------------------------------------------
  5133. INT B0 - through BF - used by BASIC while in interpreter
  5134. ---------------------------------------------
  5135. INT C0 - used by BASIC while in interpreter
  5136. ---------------------------------------------
  5137. INT C1 - used by BASIC while in interpreter
  5138. ---------------------------------------------
  5139. INT C2 - used by BASIC while in interpreter
  5140. ---------------------------------------------
  5141. INT C3 - used by BASIC while in interpreter
  5142. ---------------------------------------------
  5143. INT C4 - used by BASIC while in interpreter
  5144. ---------------------------------------------
  5145. INT C5 - used by BASIC while in interpreter
  5146. ---------------------------------------------
  5147. INT C6 - used by BASIC while in interpreter
  5148. ---------------------------------------------
  5149. INT C7 - used by BASIC while in interpreter
  5150. ---------------------------------------------
  5151. INT C8 - used by BASIC while in interpreter
  5152. ---------------------------------------------
  5153. INT C9 - used by BASIC while in interpreter
  5154. ---------------------------------------------
  5155. INT CA - used by BASIC while in interpreter
  5156. ---------------------------------------------
  5157. INT CB - used by BASIC while in interpreter
  5158. ---------------------------------------------
  5159. INT CC - used by BASIC while in interpreter
  5160. ---------------------------------------------
  5161. INT CD - used by BASIC while in interpreter
  5162. ---------------------------------------------
  5163. INT CE - used by BASIC while in interpreter
  5164. ---------------------------------------------
  5165. INT CF - used by BASIC while in interpreter
  5166. ---------------------------------------------
  5167. INT D0 - used by BASIC while in interpreter
  5168. ---------------------------------------------
  5169. INT D1 - used by BASIC while in interpreter
  5170. ---------------------------------------------
  5171. INT D2 - used by BASIC while in interpreter
  5172. ---------------------------------------------
  5173. INT D3 - used by BASIC while in interpreter
  5174. ---------------------------------------------
  5175. INT D4 - used by BASIC while in interpreter
  5176. ---------------------------------------------
  5177. INT D5 - used by BASIC while in interpreter
  5178. ---------------------------------------------
  5179. INT D6 - used by BASIC while in interpreter
  5180. ---------------------------------------------
  5181. INT D7 - used by BASIC while in interpreter
  5182. ---------------------------------------------
  5183. INT D8 - used by BASIC while in interpreter
  5184. ---------------------------------------------
  5185. INT D9 - used by BASIC while in interpreter
  5186. ---------------------------------------------
  5187. INT DA - used by BASIC while in interpreter
  5188. ---------------------------------------------
  5189. INT DB - used by BASIC while in interpreter
  5190. ---------------------------------------------
  5191. INT DC - used by BASIC while in interpreter
  5192. ---------------------------------------------
  5193. INT DD - used by BASIC while in interpreter
  5194. ---------------------------------------------
  5195. INT DE - used by BASIC while in interpreter
  5196. ---------------------------------------------
  5197. INT DF - used by BASIC while in interpreter
  5198. ---------------------------------------------
  5199. INT E0 - CP/M-86 function calls
  5200. ---------------------------------------------
  5201. INT E0 - used by BASIC while in interpreter
  5202. ---------------------------------------------
  5203. INT E1 - used by BASIC while in interpreter
  5204. ---------------------------------------------
  5205. INT E2 - used by BASIC while in interpreter
  5206. ---------------------------------------------
  5207. INT E3 - used by BASIC while in interpreter
  5208. ---------------------------------------------
  5209. INT E4 - Logitech Modula v2.0 - MonitorEntry
  5210.     AX = 0005h
  5211.     BX = priority
  5212. ---------------------------------------------
  5213. INT E4 - Logitech Modula v2.0 - MonitorExit
  5214.     AX = 0006h
  5215. ---------------------------------------------
  5216. INT E4 - used by BASIC while in interpreter
  5217. ---------------------------------------------
  5218. INT E5 - used by BASIC while in interpreter
  5219. ---------------------------------------------
  5220. INT E6 - used by BASIC while in interpreter
  5221. ---------------------------------------------
  5222. INT E7 - used by BASIC while in interpreter
  5223. ---------------------------------------------
  5224. INT E8 - used by BASIC while in interpreter
  5225. ---------------------------------------------
  5226. INT E9 - used by BASIC while in interpreter
  5227. ---------------------------------------------
  5228. INT EA - used by BASIC while in interpreter
  5229. ---------------------------------------------
  5230. INT EB - used by BASIC while in interpreter
  5231. ---------------------------------------------
  5232. INT EC - used by BASIC while in interpreter
  5233. ---------------------------------------------
  5234. INT ED - used by BASIC while in interpreter
  5235. ---------------------------------------------
  5236. INT EE - used by BASIC while in interpreter
  5237. ---------------------------------------------
  5238. INT EF - used by BASIC while in interpreter
  5239. ---------------------------------------------
  5240. INT EF - GEM - INTERFACE
  5241.     CX = 0473h
  5242.     DS:DX -> GEM parameter block
  5243. ---------------------------------------------
  5244. INT F0 - used by BASIC while in interpreter
  5245. ---------------------------------------------
  5246. INT F1 - reserved for user interrupt
  5247. ---------------------------------------------
  5248. INT F2 - reserved for user interrupt
  5249. ---------------------------------------------
  5250. INT F3 - reserved for user interrupt
  5251. ---------------------------------------------
  5252. INT F4 - reserved for user interrupt
  5253. ---------------------------------------------
  5254. INT F5 - reserved for user interrupt
  5255. ---------------------------------------------
  5256. INT F6 - reserved for user interrupt
  5257. ---------------------------------------------
  5258. INT F7 - reserved for user interrupt
  5259. ---------------------------------------------
  5260. INT F8 - 10 ms INTERVAL TIMER (TANDY???)
  5261. ---------------------------------------------
  5262. INT F9 - reserved for user interrupt
  5263. ---------------------------------------------
  5264. INT FA - USART READY (RS-232C) (TANDY???)
  5265. ---------------------------------------------
  5266. INT FB - USART Rx READY (keyboard) (TANDY???)
  5267. ---------------------------------------------
  5268. INT FC - reserved for user interrupt
  5269. ---------------------------------------------
  5270. INT FD - reserved for user interrupt
  5271. ---------------------------------------------
  5272. INT FE - AT/XT286/PS50+ - destroyed by return from protected mode
  5273. ---------------------------------------------
  5274. INT FF - AT/XT286/PS50+ - destroyed by return from protected mode
  5275. ---------------------------------------------
  5276. INT FF - Z100 - WARM BOOT
  5277. ---------------------------------------------
  5278. Please redistribute the following files unmodified as a group, in an archive
  5279. named INTER489:
  5280.     INTERRUP.1ST    the read-me file, containing credits, availability info
  5281.     INTERRUP.A    INT 00 through INT 27
  5282.     INTERRUP.B    INT 28 through INT FF
  5283.     INTERRUP.PRI    a brief introduction to interrupts
  5284.     INTPRINT.COM    a simple formatter that also generates the list summary
  5285.     INTPRINT.DOC    instructions for INTPRINT
  5286.     INTPRINT.C    source code for INTPRINT
  5287. ---------------------------------------------
  5288. ARPA: ralf@cs.cmu.edu             \
  5289. UUCP: {ucbvax,harvard}!cs.cmu.edu!ralf      > preferred
  5290. BIT:  ralf%cs.cmu.edu@cmuccvb         /
  5291. FIDO: Ralf Brown 1:129/46 (new address!)
  5292.     or post a message to the DR_DEBUG echo
  5293.